lexicals - Get a hash of your current 'my' variables
use Template::Toolkit::Simple; use lexicals; sub mail { my $self = shift; my $name = 'Mr. ' . $self->get_name; my $address = $self->fetch_address($name); my $stamp = Postage::Stamp->new(0.44); my $envelope = tt->render('envelope', lexicals); }
Python has a builtin function called locals() that returns the lexically scoped variables in a name/value mapping. This is a very useful idiom. Instead of needing to create a hash like this:
locals()
my $hash = { foo => $foo, bar => $bar, };
Just say:
my $hash = lexicals;
Assuming you have a $foo and $bar defined, you get the same thing.
The lexicals module exports a function called lexicals. This function returns the lexicals as a hash reference (in scalar or list context).
lexicals
The above examples deal with lexical scalars. You can also get back lexical arrays and hashes. Note: since there is no sigil to tell scalars from arrays from hashes, you can't get back a scalar and an array or hash of the same name. In this case, SCALAR beats HASH beats ARRAY. Why? Because I said so! (Actually I just used the sort order of the sigils).
sub foo { my %h = ( O => 'HAI' ); my @a = [ qw( foo bar baz ) ]; my $s = 42; my %x = ( O => 'HAI' ); my @x = [ qw( foo bar baz ) ]; my $x = 42; print Dump lexicals; }
would yield:
--- a: - foo - bar - baz h: O: HAI s: 42 x: 42
The lexicals function only reports the lexical variables variables that were defined before where it gets called.
This could be a handy idiom for debugging:
use XXX; sub foo { ... XXX lexicals; # See your lexicals in the nude. ... }
PadWalker
Acme::Locals
Ingy döt Net <ingy@cpan.org>
Copyright 2011-2014. Ingy döt Net.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html
To install lexicals, copy and paste the appropriate command in to your terminal.
cpanm
cpanm lexicals
CPAN shell
perl -MCPAN -e shell install lexicals
For more information on module installation, please visit the detailed CPAN module installation guide.