How can I monitor the Perl call stack?
callstack, perl
Solution
You weren't specific about why you'd like to monitor the call stack and trace your subs, so answers will have to be broad.
One method is `caller`:
caller
Returns the context of the current subroutine call. In scalar context, returns the caller's package name if there is a caller, that is, if we're in a subroutine or eval or require, and the undefined value otherwise. In list context, returns
# 0 1 2
($package, $filename, $line) = caller;
With EXPR, it returns some extra information that the debugger uses to print a stack trace. The value of EXPR indicates how many call frames to go back before the current one.
# 0 1 2 3 4
($package, $filename, $line, $subroutine, $hasargs,
# 5 6 7 8 9 10
$wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash)
= caller($i);
You might also use the Devel::Cover module:
Code coverage data are collected using a pluggable runops function which counts how many times each op is executed. These data are then mapped back to reality using the B compiler modules. There is also a statement profiling facility which needs a better backend to be really useful.
The more you tell us about what you want to do, the more helpful to you our answers will be!
Problem
I'm using ActivePerl 5.8 on Windows XP. ``` use strict; use warnings; use Data::Dumper; ``` There are three subroutines used in my script. To detect the call stack, I can only insert some `print "some location";` and check the print result from console Window. Is there any good method to monitor it? Thank you.