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.