我有一种情况,我需要找到一个包的调用者,我的代码看起来像:
Inherited.pm:
package Inherited;
our @ISA = qw(BaseClass);
sub new {
SUPER::new();
}
Run Code Online (Sandbox Code Playgroud)
BaseClass.pm
package BaseClass;
sub new {
$a = caller(0);
print $a
}
Run Code Online (Sandbox Code Playgroud)
现在我有另一个类(MyClass.pm):
MyClass.pm:
$obj = Inherited->new();
Run Code Online (Sandbox Code Playgroud)
这打印继承.但我需要MyClass作为印刷语句.
有人可以帮我解决一下如何解决这个问题?
当你给调用者一个参数时,你告诉它要返回多少级别.你已经给它了参数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;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
0: Inherited
1: MyClass
Run Code Online (Sandbox Code Playgroud)
请记住始终在您的问题中包含完整的示例程序.您发布的Perl代码因与呼叫者无关的各种其他原因而被破坏.
归档时间: |
|
查看次数: |
1281 次 |
最近记录: |