サブルーチンが(@ISAプロービングを使用して)メソッドとして呼び出されるか、プレーンなサブルーチンとして呼び出されるかを判断する方法はありますか?多分拡張モジュールsuper-caller()の何らかの種類で?例えばPerlでは、サブルーチンがメソッドとして呼び出されたかどうかをどのように判断できますか?
は、以下の二つの呼び出し間func()
を区別することができますどのように
package Ad::Hoc;
sub func() { ... }
与えられた:
Ad::Hoc->func; # or $obj->func
Ad::Hoc::func('Ad::Hoc'); # or func($obj)
(私が知っている、これを行うには欲望が悪いデザインのそうな表示である™)
しかし、メソッドが可変数の引数を受け入れる場合にのみ、それを使う必要があります。それ以外の場合は '@ _ 'のサイズを確認するだけです。 – ikegami
+1非常に有望です。私は、 'called_as_method()'(5.18.0、PadWalker-1.96、D :: Caller-2.06)で '$ blessed-> func'を試しても" pushmarkまたはpad "という致命的なエラーが出ますが、" package method "上記のように、完全に機能します。 – pilcrow
@ikegami、agree。これはおそらく最初に許可されていないはずの問題から作られた技術的好奇心です。 – pilcrow