var_name#
Given a reference to a variable, return the name that variable has in a specified subroutine’s pad — or undef if it is not there.
Synopsis#
use PadWalker qw(var_name);
my $name = var_name($level, \$var);
my $name = var_name(\&sub, \$var);
What you get back#
A string — the sigiled pad name, e.g. '$foo' or '@items'. If
the reference does not correspond to any pad slot in the target
sub, returns undef.
The first argument selects the sub to search: a non-negative
integer is interpreted the same as the argument to peek_my (walk
the call stack), a code reference is searched directly.
Examples#
Look up the name of a local variable by reference:
my $foo;
print var_name(0, \$foo); # $foo
Wrap it for use from helper subs:
sub my_name {
return var_name(1, shift);
}
my $bar;
print my_name(\$bar); # $bar
Edge cases#
References to globals, package variables, or anonymous SVs return
undef— only pad entries are searched.If several pad slots point at the same SV, the last one wins (same caveat as
peek_sub).The second argument must be a reference; passing a plain value croaks with
Usage: PadWalker::var_name(sub, var_ref).
Differences from upstream#
Fully compatible with upstream PadWalker 2.5.
See also#
peek_my— the inverse direction, names to references.peek_sub— all names in a sub’s pad regardless of value.closed_over— captured lexicals only.