NAME
Devel::Caller - meatier versions of caller
SYNOPSIS
use Devel::Caller qw(caller_cv);
$foo = sub { print "huzzah\n" if $foo == caller_cv(0) };
$foo->(); # prints huzzah
use Devel::Caller qw(called_with);
sub foo { print called_with(0,1); }
foo( my @foo ); # should print '@foo'
DESCRIPTION
- caller_cv($level)
-
caller_cv
gives you the coderef of the subroutine being invoked at the call frame indicated by the value of $level - caller_args($level)
-
Returns the arguments passed into the caller at level $level
- caller_vars( $level, $names ) =item called_with($level, $names)
-
called_with
returns a list of references to the original arguments to the subroutine at $level. if $names is true, the names of the variables will be returned insteadconstants are returned as
undef
in both cases - called_as_method($level)
-
called_as_method
returns true if the subroutine at $level was called as a method.
BUGS
All of these routines are susceptible to the same limitations as caller
as described in "caller" in perlfunc
The deparsing of the optree perfomed by called_with is fairly simple-minded and so a bit flaky. It's know to currently be inaccurate in this case:
print foo( $bar ), baz( $quux );
When returning answers about the invocation of baz it will mistakenly return the answers for the invocation of foo so you'll see '$bar' where you expected '$quux'.
A workaround is to rewrite the code like so:
print foo( $bar );
print bar( $baz );
A more correct fix is left as a TODO item.
Also, on perl 5.005_03
use vars qw/@bar/;
foo( @bar = qw( some value ) );
will not deparse correctly as it generates real split ops rather than optimising it into a constant assignment at compile time as in later releases of perl.
SEE ALSO
"caller" in perlfunc, PadWalker, Devel::Peek
AUTHOR
Richard Clamp <richardc@unixbeard.net> with close reference to PadWalker by Robin Houston
COPYRIGHT
Copyright (c) 2002, 2003, 2006 Richard Clamp. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.
1 POD Error
The following errors were encountered while parsing the POD:
- Around line 94:
You forgot a '=back' before '=head1'