i.e. I expect $h{x} to hold a hash
That's the clue - you expect that, but it isn't. You look at the box, and you are dereferencing that undef value explicitly as a hash. If you access keys/values of an undef value, your dereference happens implicitly and the hashref is created (autovivification):
use strict; my $f; $f->{foo} = 'bar'; # okay my ($h, %new); %new = %$h; # not okay
Said otherwise, if you dereference something, you state that it is a reference, which is different to autovivication of an undef value into something.
Clearer?
--shmem
_($_=" "x(1<<5)."?\n".q·/)Oo. G°\ /
/\_¯/(q /
---------------------------- \__(m.====·.(_("always off the crowd"))."·
");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
In reply to Re^5: Keys() required to autovivify?
by shmem
in thread Keys() required to autovivify?
by jrw
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |