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-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>

