C'è un modo per determinare se una subroutine è invocata come metodo (con probing @ISA) o come subroutine semplice? Forse con una sorta di modulo di estensione super- caller()?In Perl, come posso determinare se una subroutine è stata invocata come metodo?
Ad esempio, dato
package Ad::Hoc;
sub func() { ... }
Come può func()
discriminare tra i due seguenti invocazioni:
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)
(lo so, la voglia di fare questo è un'indicazione Probabile di cattiva progettazione ™.)
Ma è necessario usarlo solo se il metodo accetta un numero variabile di argomenti. Altrimenti, puoi semplicemente controllare la dimensione di '@ _'. – ikegami
+1 molto promettente. Ottengo un fatale errore "pushmark o pad" se provo '$ blessed-> func' con' called_as_method() '(5.18.0, PadWalker-1.96, D :: Caller-2.06), ma l'invocazione del" metodo del pacchetto " funziona perfettamente, come illustrato sopra. – pilcrow
@ikegami, d'accordo. Questa è una curiosità tecnica derivata da un problema che probabilmente non avrebbe dovuto essere consentito in primo luogo. – pilcrow