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



我正在为Perl类编写一个AUTOLOAD子例程。我可以用$name = $ExampleClass::AUTOLOAD;获得未知方法的名称。但是,这为我提供了完整的标识符:ExampleClass::unknownmethodname。我只需要unknownmethodname.我怎么只能获得名称的那部分?谢谢!

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

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

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

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 =~ /([^:]+)::(.+)/;

最新更新