Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
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'.

Replies are listed 'Best First'.
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?
[kcott]: marioroy, thanks also.
[marioroy]: kcott some time ago, somebody posted about slow logging. I forgot the post. I believed you had replied to it.
[marioroy]: ... among many workers. Somebody had ask how.
[marioroy]: It's not this thread Re^4: Mahalo - Thank you in Hawaii. Someone before had asked before about slow performance.

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2017-08-18 08:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Who is your favorite scientist and why?



























    Results (297 votes). Check out past polls.

    Notices?