我有一种情况,我需要找到一个包的调用者,我的代码看起来像:
Inherited.pm:
package Inherited; our @ISA = qw(BaseClass); sub new { SUPER::new(); }
BaseClass.pm
package BaseClass; sub new { $a = caller(0); print $a }
现在我有另一个类(MyClass.pm),它执行:
MyClass.pm:
$obj = Inherited->new();
这打印继承.但我需要MyClass作为印刷语句.
解决方法
当你给
caller一个参数时,你会告诉它要返回多少级别.你给它的参数是0,这是当前的水平.如果你想要一个级别,添加1:
use v5.12; package Inherited { our @ISA = qw(BaseClass); sub new { $_[0]->SUPER::new(); } } package BaseClass { sub new { say "0: ",scalar caller(0); say "1: ",scalar caller(1); } } package MyClass { my $obj = Inherited->new; }
结果是:
0: Inherited 1: MyClass