Create a hash of your 'my' variables
Perl Perl6
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
doc
lib
test
.travis.yml
About
Changes
Meta
ReadMe.pod

ReadMe.pod

Name

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

lexicals-pm

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

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