Ho una situazione in cui ho bisogno di trovare il chiamante di un pacchetto e il mio codice simile a:Perl Inheritance - Chi è il chiamante della classe genitore
Inherited.pm:
package Inherited;
our @ISA = qw(BaseClass);
sub new {
SUPER::new();
}
BaseClass .pm
package BaseClass;
sub new {
$a = caller(0);
print $a
}
Ora ho un'altra classe (MyClass.pm) che fa:
MyClass.pm:
$obj = Inherited->new();
Questa stampa è ereditata. Ma ho bisogno di MyClass per essere la dichiarazione stampata.
Qualcuno potrebbe aiutarmi per risolvere questo problema?
Non capisco perché te lo aspetti. "Inherited" è il chiamante. Puoi controllare il 'new()' di 'Inherited' e poi passare quell'informazione. – Cfreak
@Cfreak: grazie per la risposta. Ya accetto che passare per argomento sia una soluzione, ma esiste un altro modo per trovare il chiamante della classe genitore. Nel mio scenario attuale ho bisogno di questo tipo di funzionalità senza passare argomenti. – sundar
Potresti essere in grado di usare la capacità di stack trace di "Carp" per cercare l'intera lista di chiamanti ('Carp :: longmess()') ma non è una grande soluzione. Dai un'occhiata ai moduli 'Class :: *' su CPAN. Potrebbe esserci una soluzione più elegante lì. – Cfreak