相关疑难解决方法(0)

Perl 的“Package::->method()”(冒号-冒号-箭头)表示法

我正在阅读该attributes模块的文档,并遇到了一个我从未见过的方法调用符号:

use attributes ();
attributes::->import(__PACKAGE__, \$x, 'Bent');
Run Code Online (Sandbox Code Playgroud)

该文档没有提供此语法的解释。

经调查,它似乎Package::->method()相当于Package->method()和'Package'->method()。

它似乎也相当于Package::method('Package'),前提是该方法不是继承的。

问题 0:使用Package::->method()符号有什么实际原因吗?


编辑:我发现如果您有一个与包同名的常量,Package::->method()则调用包方法,而Package->method()调用常量上的方法。

use constant Foo => bless {}, 'Bar'; # or just => 'Bar'

print Foo::->method(); # prints 'Foo method'
print 'Foo'->method(); # prints 'Foo method'
print Foo->method();   # prints 'Bar method'

package Foo;
sub method { 'Foo method' }
package Bar;
sub method { 'Bar method' }
Run Code Online (Sandbox Code Playgroud)

奇怪的是use …

perl perlop

7
推荐指数
1
解决办法
138
查看次数

标签 统计

perl ×1

perlop ×1