How do Perl hashes work?
Are they like arrays in PHP or some completely different beast?
From what I understand all it is is an associative array right? This is what I thought until I began
to talk to a Perl programmer who told me I was completely wrong, but couldn’t explain it in a way
that didn’t make my eyes cross.
Anyway, the way that I thought it worked was like this
PHP’s:
$argv['dog_name'] = 'missy';
$argv[0] = 'tree';
same as Perl’s:
my %argv{'dog_name'} = 'missy';
my $argv[0] = 'tree';
Right? But you cannot print(%argv{‘dog_name’}), you have to (revert?) to print($argv{‘dog_name’}) which is confusing?
Is it trying to print as a variable now, like you would in PHP, echo $argv[‘dog_name’]; ? Does this mean (again) that a hash is
just a PHP associative array with a % to declare but a $ to access?
I don’t know, I’m hoping some PHP/Perl Guru can explain how hashes work, and how similar they are
to PHP’s arrays.
To write
in Perl, you would write it as follows:
if you had strict on, which you should, then you will need to predeclare the variable:
If the above is a bit repetitive for you, you could write it:
You can find more detail on the perldata manpage.
In short, the reasons why the sigils change from
%to$is that%hashrefers to a plural hash (a list of key value pairs), and$hash{foo}refers to a single element of a hash. This is the same with arrays, where@refers to the full array, and$refers to a single element. (for both arrays and hashes a leading@sigil with a subscript means a slice of the data, where multiple keys are passed and a list of values are returned)