这是正确的:
这不行:
A::B->new();
这不行:
my $m = 'A::B->new';
&{\&{$m}};
如何让它工作?奇怪的语法对于不包含“->”的常规函数确实有效。
A::B->new();
my $m = 'A::B->new';
&{\&{$m}};
如何让它工作?奇怪的语法对于不包含“->”的常规函数确实有效。
my $pkg = 'A::B';
my $method = 'new';
$pkg->$method;
'print'("abc\n");
。 - ikegami'A::B'->$method
将会生效),但右侧的内容必须是一个标量或者裸方法名。(有趣的是,右侧也可以是一个 CODE 引用。试一下吧。)这实际上在 perlop
中有简要说明。 - friedo${...}
会生成一个标量。 :) - friedo
$f
是函数名,那么$f->()
就可以工作,或者是旧的&$f()
。请注意,这两个都是strict 'refs'
违规。 - hobbs&{\&{$f}}
和更有用的&{\&{$f}}()
,也就是(\&$f)->()
,虽然在理论上应该是严重违规的,但实际上并没有抛出异常。这只是一个小漏洞。 - ikegamino strict 'refs'
也没什么区别 :) - hobbs