in reply to Re^2: Getting file and line number where a subroutine is declared
in thread Getting file and line number where a subroutine is declared
\&Foo::some_sub autovivifies a sub stub at run-time (just like sub Foo::some_sub; would at compile-time).
So it will work fine as long as we don't make any reference to the sub in any compiled code that comes before the definition.
use B; $\="\n"; # line 99 'bin/some_code.pl' { no strict 'refs'; print B::svref_2object(eval q(\\*{'Foo::some_sub'}))->LINE; print B::svref_2object(eval q(\\&Foo::some_sub))->GV->LINE; } eval q{Foo::some_sub()}; package Foo; # line 23 'bin/some_file.pl' sub some_sub { warn "Got to here"; } __END__ 25 25 Got to here at 'bin/some_file.pl' line 24.
Of course, string eval has a code smell, but so does no strict 'refs'.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^4: Getting file and line number where a subroutine is declared
by ikegami (Patriarch) on Feb 02, 2009 at 19:32 UTC |