如何获取从其他包继承的调用方法

时间:2013-05-21 09:54:43

标签: perl

我想获取调用方法的名称。我尝试调用,在大多数情况下它工作正常。但是当方法从父包继承时,结果不是我所期望的。以下是示例:

package Caller;
sub output_caller { #output the calling method's name
    my @stacks = caller(1);
    print $stacks[3];
}

package Foo;
sub foo {
    Caller::output_caller();
}

package Bar;
use base 'Foo';

Bar->foo();

输出

Foo::foo 

我期望的是

Bar::foo

是否可以获得Bar :: foo?

1 个答案:

答案 0 :(得分:0)

use Carp qw(confess)让你接近。它会返回

at C:\src_test\perl\TestMost\CallerTest.pl line 11.
    Foo::foo('Bar') called at C:\src_test\perl\TestMost\CallerTest.pl line 18
Foo::foo

来自此修改后的脚本

package Caller;
sub output_caller { #output the calling method's name
    my @stacks = caller(1);
    print $stacks[3];
}

package Foo;
use Carp qw(cluck);
sub foo {
    cluck();
    Caller::output_caller();
}

package Bar;
use base 'Foo';

Bar->foo();