in reply to Hash initialization works, but why?
But I don't understand why it works
It's a hash slice.
@foo{@keys} = @values; looks like it's affecting @foo. But it isn't. It's affecting %foo
So $foo[0] affects $foo? No. The sigil indicates the value type, not the variable type. $foo[3] refers to the scalar value (thus the $) at element 3 of the array @foo.
@foo{qw( 1 2 3 )} = qw( a b c ); works the same as %foo = qw( 1 a 2 b 3 c );
Only if the hash is initially empty.
my %foo = qw( a 1 b 2 ); my %bar = qw( a 1 b 2 ); %foo = qw( c 3 d 4 ); @bar{qw( c d )} = qw( 3 4 ); print(join(' ', %foo), "\n"); # c 3 d 4 print(join(' ', %bar), "\n"); # a 1 b 2 c 3 d 4
I have an intuition that this has to do with (de)referencing of typeglobs
No, no typeglobs involved, so it works equally well on lexical (my) variables as package (our) variables.
|
|---|