我正在阅读该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 …