Perl AUTOLOAD - 获取没有类名的未知方法的名称

时间:2017-06-20 15:28:33

标签: perl class namespaces autoload

我正在为Perl类编写AUTOLOAD子例程。我可以使用$name = $ExampleClass::AUTOLOAD;获取未知方法的名称。但是这会得到完整的标识符:ExampleClass::unknownmethodname。我只需要unknownmethodname。我怎么才能得到这部分名字?谢谢!

2 个答案:

答案 0 :(得分:3)

( my $method_name = our $AUTOLOAD ) =~ s/^.*:://s;

my $method_name = our $AUTOLOAD =~ s/^.*:://sr;    # 5.14+

答案 1 :(得分:1)

要保留调用类名称和方法名称,请写入

my ($class, $method) = $AUTOLOAD =~ /(.+)::(.+)/;

这会将$AUTOLOAD中的字符串拆分为两部分:直到最后一次出现::的部分和之后的部分。

使用您自己的示例

use strict;
use warnings 'all';
use feature 'say';

our $AUTOLOAD = 'ExampleClass::unknownmethodname';

my ($class, $method) = $AUTOLOAD =~ /(.+)::(.+)/;

say "\$class  = $class";
say "\$method = $method";

输出

$class  = ExampleClass
$method = unknownmethodname


更新

我无法想象为什么你想要分离::第一个出现,因为它会导致第一部分的类名的任意一块,其次是由类名的其余部分和第二部分的方法名称

但您可以使用split限制

my ($part1, $part2) = split /::/, $AUTOLOAD, 2;

或使用与上述类似的正则表达式

my ($part1, $part2) = $AUTOLOAD =~ /([^:]+)::(.+)/;