NAME
Util::Underscore::CallStackFrame - object-oriented wrapper for "caller" builtin
VERSION
version v1.4.2
SYNOPSIS
(caller(4))[3];
# is equivalent to
Util::Underscore::CallStackFrame->of(4)->subroutine;
DESCRIPTION
This is a wrapper class for the caller
builtin, to allow access to the fields by name. See the caller
documentation for more details.
METHODS
of($level)
-
This class method is a factory method. It returns an object-oriented view on the
caller
builtin.$level: An integer indicating the call stack frame level to return. A level of zero indicates the current level (from the perspective of an immediate user of this class). Negative values are illegal.
returns: A
Util::Underscore::CallStackFrame
instance for the requested stack frame. If no such level exists,undef
is returned. package
-
The package from which the function was called.
package Foo; Bar::baz() eq __PACKAGE__ or die; package Bar; sub baz { return Util::Underscore::CallStackFrame->of(0)->package; }
returns: This stack frame's package name, as a string.
file
-
The file name where the function was called.
returns: The file name, as a string.
line
-
The line where the function was called. Note that this isn't necessarily the exact line, but sometimes the line where the current statement ended.
returns: The line number, as an integer.
subroutine
-
The fully qualified name of the subroutine that was called in this stack frame. There are a couple of special values:
The last part of the fully qualified name is
__ANON__
when the sub never had a name, i.e. is an anonymous subroutine.The whole name is
(eval)
when this frame was generated from theeval
builtin, rather than from an ordinary function call. Instead of matching against this name, one can use theis_eval
accessor below,The whole name is
(unknown)
when a subroutine was named, but the typeglob where the subroutine was stored was deleted. I have never encountered this behaviour.
return: The fully qualified name of the called subroutine, as a string.
has_args
-
Checks whether the function call set up a new instance of
@_
. It does not check whether any arguments where passed at all.In which cases is
has_args
false?The stack frame was generated for an
eval
, rather than for a function call.The function call re-used the existing
@_
, which happens when calling a function like&func
rather than&func()
orfunc()
. This is a fairly obscure feature, but is sometimes encountered when doing an explicit tail call such asgoto &func
.
If args were passed, an array ref to a copy of
@_
is returned. This means that arguments loose their referential identity. This uses the@DB::args
mechanism (see the caller docs for more details), which means these values may not be up to date.returns: A false value if no new
@_
instance was created in this stack frame. Otherwise, a true value is returned, which is an arrayref containing the arguments with which the subroutine was called. wantarray
-
The context in which that function was called. See the
wantarray
documentation for more details.The values are true for list context, false but defined for scalar context, and undefined for void context.
return: an indicator for that stack frame's context.
is_eval
-
Checks whether this stack frame was generated by an
eval
construct. If so, this returns another accessor object with two attributes.returns: a false value if this frame was generated by an ordinary subroutine call. If it was created by an
eval
, then it returns an accessor object (which is also a true-ish value).The fields of the accessor object are:
source
-
If that stack frame was generated by a string-eval and not a block-eval, then this field contains the source code that was eval'd.
returns:
undef
or the source of theeval
, if available. is_require
-
Indicates whether this
eval
is actually ause
orrequire
.returns: a boolean value.
is_require
-
Indicates whether this
eval
is actually ause
orrequire
.returns: a boolean value.
hints
-
The
$^H
under which the caller was compiled. This value is for perl's internal use only.returns: The caller's
$^H
. bitmask
-
The
%{^WARNING_BITS}
under which the caller was compiled. This value is for perl's internal use only.returns_ The caller's
${^WARNING_BITS}
.The
%^H
hint hash under which the caller was compiled. This hash offers storage for pragmas during compilation. In the context of stack traces, this should be treated as a read-only value.returns: The caller's
%^H
, orundef
if it was empty.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/latk/p5-Util-Underscore/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
AUTHOR
Lukas Atkinson (cpan: AMON) <amon@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Lukas Atkinson.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.