good chemistry is complicated, and a little bit messy -LW |
|
PerlMonks |
What's the difference between "delete" and "undef" with hashes?by faq_monk (Initiate) |
on Oct 08, 1999 at 00:20 UTC ( [id://628]=perlfaq nodetype: print w/replies, xml ) | Need Help?? |
Current Perl documentation can be found at perldoc.perl.org. Here is our local, out-dated (pre-5.6) version:
Hashes are pairs of scalars: the first is the key, the second is the value.
The key will be coerced to a string, although the value can be any kind of
scalar: string, number, or reference. If a key
Pictures help... here's the
keys values +------+------+ | a | 3 | | x | 7 | | d | 0 | | e | 2 | +------+------+ And these conditions hold
$ary{'a'} is true $ary{'d'} is false defined $ary{'d'} is true defined $ary{'a'} is true exists $ary{'a'} is true (perl5 only) grep ($_ eq 'a', keys %ary) is true If you now say
undef $ary{'a'} your table now reads:
keys values +------+------+ | a | undef| | x | 7 | | d | 0 | | e | 2 | +------+------+ and these conditions now hold; changes in caps:
$ary{'a'} is FALSE $ary{'d'} is false defined $ary{'d'} is true defined $ary{'a'} is FALSE exists $ary{'a'} is true (perl5 only) grep ($_ eq 'a', keys %ary) is true Notice the last two: you have an undef value, but a defined key! Now, consider this:
delete $ary{'a'} your table now reads:
keys values +------+------+ | x | 7 | | d | 0 | | e | 2 | +------+------+ and these conditions now hold; changes in caps:
$ary{'a'} is false $ary{'d'} is false defined $ary{'d'} is true defined $ary{'a'} is false exists $ary{'a'} is FALSE (perl5 only) grep ($_ eq 'a', keys %ary) is FALSE See, the whole entry is gone!
|
|