Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

Re: Tweaking 'return'.

by robin (Chaplain)
on Nov 23, 2005 at 12:05 UTC ( #511061=note: print w/replies, xml ) Need Help??

in reply to Tweaking 'return'.

If you want to track entry and exit to all subroutines, the easiest way is to write a custom debugger. It's actually very easy:
# This is the custom debugger: { package DB; sub DB {} sub sub { print STDERR "== Entering sub $sub\n"; &$sub; # Call the sub print STDERR "=== Leaving sub $sub\n"; } } # Now some example code to test it with: sub hello { print "Hello, "; world(); } sub world { print "World!\n"; } $|++; # Turn off buffering, to make the control flow clearer hello();
The debugging code will only be activated if you run with perl -d, so:
$ perl Hello, World! $ perl -d Loading DB routines from version 1.28 Editor support available. Enter h or `h h' for help, or `man perldebug' for more help. == Entering sub main::hello Hello, == Entering sub main::world World! === Leaving sub main::world === Leaving sub main::hello
See perldebguts for all the gory details.

Update: As a (probably better) alternative to running perl -d, you can use

BEGIN {$^P = 1}
to enable subroutine-tracing. That way you don't need the empty sub DB either. But woe betide you if you should actually run with perl -d. Maybe it's best to use something like
BEGIN { return if $^P; # If the debugger is running, leave well alone $^P = 1; # Enable subroutine tracing package DB; *sub = sub { print STDERR "== Entering sub $sub\n"; &$sub; print STDERR "=== Leaving sub $sub\n"; }; }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://511061]
marioroy adds oatmeal raisin cookies to the platter on the sideboard.

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2017-04-27 01:45 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (498 votes). Check out past polls.