use strict;
my $f;
($f = {})->{foo} = 'bar';
my %new;
%new = %{undef()}; # not okay
I hope that clarifies things. Read perlref - the chapter about symbolic references. By saying %{''} you are
creating a symbolic reference to the symbol table entry *{''}. Typeglobs can be empty strings, but not undef, so you cannot create a symbol reference to an undef value:
$\ = $/;
$h = '';
${''}{foo} = 'bar';
print "\$h->{foo}: ", $h->{foo};
print "\$h: '", $h, "'";
print *{''}{HASH};
print *{$h}{HASH};
$h = undef;
print *{$h}{HASH};
__END__
$h->{foo}: bar
$h: ''
HASH(0x885d7a4)
HASH(0x885d7a4)
Can't use an undefined value as a symbol reference at - line 11.
The construct %{$h} being a symbolic reference:
${''}{foo} = 'bar';
$h = '';
%new = %{$h};
print "$_ => $new{$_}\n" for keys %new;
__END__
foo => bar
--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}
|