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 instead

constants 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'