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