Gibt es eine Möglichkeit festzustellen, ob eine Subroutine als Methode (mit @ISA probing) oder als einfache Subroutine aufgerufen wird? Vielleicht mit einer Art von Erweiterungsmodul super- caller()?Wie kann ich in Perl feststellen, ob eine Subroutine als Methode aufgerufen wurde?
Zum Beispiel gegeben
package Ad::Hoc;
sub func() { ... }
Wie kann func()
zwischen den beiden folgenden Anrufungen unterscheiden:
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)
(ich weiß, der Wunsch, dies zu tun, ist eine Likely Anzeige Poor Design ™.)
Sie müssen dies jedoch nur verwenden, wenn die Methode eine variable Anzahl von Argumenten akzeptiert. Andernfalls können Sie einfach die Größe von '@ _' überprüfen. – ikegami
+1 sehr vielversprechend. Ich bekomme einen fatalen "pushmark or pad" -Fehler, wenn ich '$ gesegnet-> func' mit' called_as_method() '(5.18.0, PadWalker-1.96, D :: Caller-2.06), aber den" package method "-Aufruf versuche funktioniert perfekt, wie Sie oben illustrieren. – pilcrow
@ikegami, einverstanden. Das ist technische Neugier, die aus einem Problem herausgesponnen wurde, das eigentlich gar nicht hätte zugelassen werden dürfen. – pilcrow