The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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.