Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re^2: Changing every subroutine in many perl scripts

by nitin1704 (Sexton)
on Jul 26, 2012 at 03:36 UTC ( #983762=note: print w/replies, xml ) Need Help??

in reply to Re: Changing every subroutine in many perl scripts
in thread Changing every subroutine in many perl scripts

Okay, so I tried the following code:

#!/usr/bin/perl use warnings; use strict; use Hook::LexWrap; my @mars_subs = qw (add increment); for (@mars_subs) { wrap $_, pre => sub { my @caller = caller(0); for (@caller) { print $_, " " if defined $_; } print "\n"; }; } print add( 1, 2 ), "\n"; sub add { my ( $num1, $num2 ) = @_; increment($num1); return $num1 + $num2; } sub increment { my $num = shift; return ++$num; }

And the output I got is:

main 17 main::__ANON__ 1 1 1794 UUUUUUUUUUUUU main 21 main::__ANON__ 1 1538 UUUUUUUUUUUUU 3

How do I get the actual sub names like main::add instead of main::__ANON__ ?

Replies are listed 'Best First'.
Re^3: Changing every subroutine in many perl scripts
by chromatic (Archbishop) on Jul 26, 2012 at 05:55 UTC

    What are you trying to report? Are you trying to emit something for every executed function? In that case, close over the name of the wrapped function:

    my @mars_subs = qw( add increment ); for my $sub (@mars_subs) { wrap $sub, pre => sub { print "Calling '$sub'\n"; }; }

    Improve your skills with Modern Perl: the free book.

      Thanks. Yes, I want to log how these various subroutines are called one after the other, for understanding how this set of perl scripts and modules works and the dependencies between them. It's all legacy code of thousands of lines. Is there a better way to do this?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://983762]
[marto]: good morning all

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (11)
As of 2018-05-24 07:15 GMT
Find Nodes?
    Voting Booth?