Put the following code in a file called: /yourperl/site/Devel/Calls.pm:
package Devel::Calls; our $lastsub; sub DB::DB { my( $p, $f, $l, $sub ) = caller(1); return if $lastsub and $sub eq $lastsub; printf STDERR "%s(%u): %s()\n", $f//'unknown', $l//'0', $sub//'unknown', $lastsub = $sub; return; } 1;
And then invoke your scripts with perl -d:Calls yoursript.pl
You'll get a trace showing file, line and subroutine name whenever a subroutine is entered, something like:
C:\test>perl -d:Calls nestedSubs.pl 1 2 3 unknown(0): unknown() nestedSubs.pl(31): main::aaa() nestedSubs.pl(29): main::bbb() nestedSubs.pl(28): main::ccc() nestedSubs.pl(27): main::ddd() nestedSubs.pl(26): main::eee() nestedSubs.pl(25): main::fff() nestedSubs.pl(24): main::ggg() nestedSubs.pl(23): main::hhh() nestedSubs.pl(22): main::iii() nestedSubs.pl(21): main::jjj() nestedSubs.pl(20): main::kkk() nestedSubs.pl(19): main::lll() nestedSubs.pl(18): main::mmm() nestedSubs.pl(17): main::nnn() nestedSubs.pl(16): main::ooo() nestedSubs.pl(15): main::ppp() nestedSubs.pl(14): main::qqq() nestedSubs.pl(13): main::rrr() nestedSubs.pl(12): main::sss() nestedSubs.pl(11): main::ttt() nestedSubs.pl(10): main::uuu() nestedSubs.pl(9): main::vvv() nestedSubs.pl(8): main::www() nestedSubs.pl(7): main::xxx() nestedSubs.pl(6): main::yyy() nestedSubs.pl(5): main::zzz() 234
That could obviously be greatly extended, but it may be just what you're looking for.
In reply to Re: Analyzing Perl Code
by BrowserUk
in thread Analyzing Perl Code
by nitin1704
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |