I think one of the potentially more confusing parts for newcomers is understanding how hash references autovivify. For example:
use strict; use warnings; local $\ = "\n"; my %hash; print '$hash{a} ', ( $hash{a} ) ? "true" : "not true +"; print '$hash{a} ', ( defined $hash{a} ) ? "defined" : "not defi +ned"; print '$hash{a} ', ( exists $hash{a} ) ? "exists" : "doesn't +exist"; print ""; print '$hash{a}{b} ', ( $hash{a}{b} ) ? "true" : "not true +"; print '$hash{a}{b} ', ( defined $hash{a}{b} ) ? "defined" : "not defi +ned"; print '$hash{a}{b} ', ( exists $hash{a}{b} ) ? "exists" : "doesn't +exist"; print ""; print '$hash{a} ', ( $hash{a} ) ? "true" : "not true +"; print '$hash{a} ', ( defined $hash{a} ) ? "defined" : "not defi +ned"; print '$hash{a} ', ( exists $hash{a} ) ? "exists" : "doesn't +exist";
Prints:
$hash{a} not true $hash{a} not defined $hash{a} doesn't exist $hash{a}{b} not true $hash{a}{b} not defined $hash{a}{b} doesn't exist $hash{a} true $hash{a} defined $hash{a} exists
Checking for $hash{a}{b} causes $hash{a} to suddenly contain the reference to an anonymous hash that is checked for the 'b'.
-xdg
Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.
In reply to Re: "A meditation on Hashes", or "Why i need more aspirin"
by xdg
in thread "A meditation on Hashes", or "Why i need more aspirin"
by EvanK
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |