Perl继承 - 谁是父类的调用者

sun*_*dar 5 perl perl-module

我有一种情况,我需要找到一个包的调用者,我的代码看起来像:

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作为印刷语句.

有人可以帮我解决一下如何解决这个问题?

bri*_*foy 5

当你给调用者一个参数时,你告诉它要返回多少级别.你已经给它了参数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代码因与呼叫者无关的各种其他原因而被破坏.