The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

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.