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.