=pod

=for comment
DO NOT EDIT. This Pod was generated by Swim v0.1.32.
See http://github.com/ingydotnet/swim-pm#readme

=encoding utf8

=head1 Name

lexicals - Get a hash of your current 'my' variables

=for html
<a href="https://travis-ci.org/ingydotnet/lexicals-pm"><img src="https://travis-ci.org/ingydotnet/lexicals-pm.png" alt="lexicals-pm"></a>

=head1 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);
    }

=head1 Description

Python has a builtin function called C<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 C<lexicals> module exports a function called C<lexicals>. This function
returns the lexicals as a hash reference (in scalar or list context).

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

=head1 Note

The C<lexicals> function only reports the lexical variables variables that
were defined before where it gets called.

=head1 Debugging Trick

This could be a handy idiom for debugging:

    use XXX;

    sub foo {
      ...
      XXX lexicals;     # See your lexicals in the nude.
      ...
    }

=head1 See Also

=over

=item * L<PadWalker>

=item * L<Acme::Locals>

=item * L<XXX>

=back

=head1 Author

Ingy döt Net <ingy@cpan.org>

=head1 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 L<http://www.perl.com/perl/misc/Artistic.html>

=cut
