in reply to How to extract the name of a variable?
Here is an implementation using PadWalker:
This will work for variables declared with my or our, but not for things like $::x.use PadWalker qw( peek_my peek_our ); use strict; use warnings; sub name(\[$@%&*]) { for my $pad ( peek_my(1), peek_our(1)) { while (my ($k,$v) = each %$pad) { if ($v == $_[0]) { return $k; } } } return; } our $x = [0]; my @a = (1,2); my %foo = (1 => 2); my $subref = sub {}; printf "Name: %s\n", name($x); printf "Name: %s\n", name(@a); printf "Name: %s\n", name(%foo); printf "Name: %s\n", name($subref);
Note that this will not work on older perls that do not support the (\[$@^&*]) style prototype.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Source filter or PadWalker. Both are ugly
by imp (Priest) on Dec 08, 2006 at 11:18 UTC | |
|
Re: Source filter or PadWalker. Both are ugly
by Anonymous Monk on Dec 08, 2006 at 21:32 UTC |