我看到__PACKAGE__
将被编译为包名。
那么为什么代码:
Foo::bar()
能行得通。但代码:
__PACKAGE__::bar()
会产生错误:
Undefined subroutine &__PACAKGE__::bar called
调用者在 Foo 包中,所以__PACKAGE__
将是 Foo;
希望你能解释一下:)
让我添加一个示例来解释场景:
$ perl -e 'package Foo ; sub bar { print "hello\n" } ; __PACKAGE__::bar()'
Undefined subroutine &__PACKAGE__::bar called at -e line 1.
$ perl -e 'package Foo ; sub bar { print "hello\n" } ; Foo::bar()'
hello