2

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

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?

4

1 回答 1

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();
于 2013-07-10T00:59:00.340 回答