I'm just trying to learn a bit of Perl and have come across this:
foreach $element (@{$records})
{
do something;
}
To my newbie eyes, this reads:
"for each element in an array named @{$records}, do something"
but, since that seems an unlikely name for an array (with "@{$
" altogether), I imagine it isn't that simple?
I've also come across "%$
" used together.
I know %
signifies a hash and $
signifies a scalar but don't know what they mean together.
Can anyone shed any light on these?
In Perl you can have a reference (a pointer) to a data structure:
# an array
my @array;
# a reference to an array
my $ref = \@array;
When you have a reference to be able to use the array you need to dereference it
@{ $ref }
If you need to access an element as in
$array[0]
you can do the same with a reference
${$ref}[0]
The curly brackets {}
are optional and you can also use
$$ref[0]
@$ref
but I personally find them less readable.
The same applies to every other type (as %$
for a hash reference).
See man perlref for the details and man perlreftut for a tutorial.
Edit
The arrow operator ->
can also be used to dereference an array or an hash
$array_ref->[0]
or
$hash_ref->{key}
See man perlop for details