NAME
lexicals - Get a hash of your current 'my' variables
SYNOPSIS
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);
}
DESCRIPTION
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:
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).
ARRAYS AND HASHES
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
NOTE
The "lexicals" function only reports the lexical variables variables
that were defined before where it gets called.
DEBUGGING TRICK
This could be a handy idiom for debugging:
use XXX;
sub foo {
...
XXX lexicals; # See your lexicals in the nude.
...
}
SEE ALSO
* PadWalker
* Acme::Locals
* XXX
AUTHOR
Ingy döt Net <ingy@cpan.org>
COPYRIGHT AND LICENSE
Copyright 2011-2015. 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>