The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Ref::Explicit - Keywords to create arrayrefs and hashrefs

VERSION

version 0.001

SYNOPSIS

  use Ref::Explicit qw(arrayref hashref);

  my $arrayref = arrayref map { ... } @values;
  my @array_of_hashrefs = map { hashref $key => $value, ... } @values;

DESCRIPTION

This module exports keywords that provide an explicit syntax for creation of arrayrefs and hashrefs in contexts where the ordinary perl syntax leads to a punctuation overdose.

FUNCTIONS

arrayref (@VALUES)

Return an array reference containing the values passed as arguments. Useful if you have long map-like expressions whose result you need as am array reference rather than as an ordinary list. Consider the following example:

  sub search {
    ...
    my @result = grep {
      ... # complex multiline
      ... # calculations
    } @values;

    return \@result;
  }

You need to introduce an extra variable (@result) in order to return a reference. This is a very common scenario, e.g. in Moose attribute builders. You could avoid the extra variable by using square brackets:

  return [ grep {
    ...
  } @values ];

But this makes the syntax ugly and the intent unclear. With arrayref the above code becomes:

  return arrayref grep {
    ...
  } @values;

hashref (@VALUES)

Return a hash reference containing the values passed as arguments. Useful within map-like expressions that return a list of hashrefs. Consider the following example:

  my @names = ("Steven Spielberg", "George Lucas");
  my @persons = map { +{ name => $_, industry => 'Movies'  } } @names;

The + (plus) sign tells the parser to evaluate the code in curly brackets as an anonymous hashref rather than as a block. With hashref this can be written more elegantly as:

  my @persons = map { hashref name => $_, industry => 'Movies' } @names;

CAVEATS

These functions provide clarity, not speed. Use the core syntax if speed is of the essence.

AUTHOR

Peter Shangov <pshangov@yahoo.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Peter Shangov.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.