__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