Perhaps another monk can explain this behavior.
\&Foo::some_sub autovivifies a sub stub at run-time (just like sub Foo::some_sub; would at compile-time).
$ perl -le' print(exists(&Foo::some_sub)?1:0, defined(&Foo::some_sub)?1:0); $x=\&Foo::some_sub; print(exists(&Foo::some_sub)?1:0, defined(&Foo::some_sub)?1:0); eval "sub Foo::some_sub { print \"foo\" }"; print(exists(&Foo::some_sub)?1:0, defined(&Foo::some_sub)?1:0); $x->(); ' 00 10 11 foo
As demonstrated, this permits the reference to be taken to a sub that has yet to be defined.
\&Foo::some_sub creates glob entry at compile-time.
$ perl -le' print(exists($Foo::{not_a_sub})?1:0); print(exists($Foo::{some_sub})?1:0); $x=\&Foo::some_sub; ' 0 1
In reply to Re^2: Getting file and line number where a subroutine is declared
by ikegami
in thread Getting file and line number where a subroutine is declared
by Ovid
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |