Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^3: Getting file and line number where a subroutine is declared

by kyle (Abbot)
on Feb 02, 2009 at 19:19 UTC ( #740790=note: print w/ replies, xml ) Need Help??


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'.


Comment on Re^3: Getting file and line number where a subroutine is declared
Select or Download Code
Re^4: Getting file and line number where a subroutine is declared
by ikegami (Pope) on Feb 02, 2009 at 19:32 UTC

    Symbolic refs will do instead of eval.

    { no strict 'refs'; my $name = 'Foo::some_sub'; print B::svref_2object(\*$name)->LINE; print B::svref_2object(\&$name)->GV->LINE; $name->(); }

    It can be done with strict refs too.

    my $glob = $::{'Foo::'}{some_sub}; print B::svref_2object(\*$glob)->LINE; print B::svref_2object(\&$glob)->GV->LINE; $glob->();

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://740790]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (10)
As of 2015-07-07 01:00 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (86 votes), past polls