caller
caller EXPR
callerThis function returns information about the stack of current subroutine calls and such. Without an argument, it returns the package name, filename, and line number from which the currently executing subroutine was called:
($package, $filename, $line) = caller;
Here’s an example of an exceedingly picky function, making use of
the special tokens _ _PACKAGE_ _ and
_ _FILE_ _ described in Chapter 2:
sub careful {
my ($package, $filename) = caller;
unless ($package eq _ _PACKAGE_ _ && $filename eq _ _FILE_ _) {
die "You weren't supposed to call me, $package!";
}
say "called me safely";
}
sub safecall {
careful();
}When called with an argument, caller evaluates
EXPR as the number of stack frames to go back
before the current one. For example, an argument of 0 means the current
stack frame, 1 means the caller, 2 means the caller’s caller, and so on.
The function also reports additional information, as shown here:
my $i = 0;
while (my ($package, $filename, $line, $subroutine,
$hasargs, $wantarray, $evaltext, $is_require,
$hints, $bitmask, $hinthash) = caller($i++) )
{
...
}If the frame is a subroutine call, $hasargs is true if it has its own @_ array (not one borrowed from its caller).
Otherwise, $subroutine may be
“(eval)” if the frame is not a
subroutine call but an eval. If so,
additional elements $evaltext and
$is_require are set: $is_require is true if the frame is created by
a require or use statement, and $evaltext contains the text of the eval EXPR statement. ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access