Perl AUTOLOAD - 获取不带 class 名称的未知方法的名称
Perl AUTOLOAD - get name of unknown method without class name
我正在为 Perl class 编写 AUTOLOAD
子例程。我可以使用 $name = $ExampleClass::AUTOLOAD;
获取未知方法的名称。然而,这让我得到了完整的标识符:ExampleClass::unknownmethodname
。我只需要unknownmethodname
。我怎样才能只得到那部分名字?谢谢!
( my $method_name = our $AUTOLOAD ) =~ s/^.*:://s;
或
my $method_name = our $AUTOLOAD =~ s/^.*:://sr; # 5.14+
要保留调用class名称和方法名称,写
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
更新
我无法想象你为什么要在 ::
的 第一次 出现时拆分,因为它会导致 [=41] 的任意块=] 第一部分的名称,然后是 class 名称的其余部分和第二部分的方法名称
但是你可以只使用 split
限制
my ($part1, $part2) = split /::/, $AUTOLOAD, 2;
或使用与上述类似的正则表达式
my ($part1, $part2) = $AUTOLOAD =~ /([^:]+)::(.+)/;
我正在为 Perl class 编写 AUTOLOAD
子例程。我可以使用 $name = $ExampleClass::AUTOLOAD;
获取未知方法的名称。然而,这让我得到了完整的标识符:ExampleClass::unknownmethodname
。我只需要unknownmethodname
。我怎样才能只得到那部分名字?谢谢!
( my $method_name = our $AUTOLOAD ) =~ s/^.*:://s;
或
my $method_name = our $AUTOLOAD =~ s/^.*:://sr; # 5.14+
要保留调用class名称和方法名称,写
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
更新
我无法想象你为什么要在 ::
的 第一次 出现时拆分,因为它会导致 [=41] 的任意块=] 第一部分的名称,然后是 class 名称的其余部分和第二部分的方法名称
但是你可以只使用 split
限制
my ($part1, $part2) = split /::/, $AUTOLOAD, 2;
或使用与上述类似的正则表达式
my ($part1, $part2) = $AUTOLOAD =~ /([^:]+)::(.+)/;