#@h{qw(a b c)} doesn't create an @h array. It sets 3 scalar values in the %h hash. use strict; use warnings; use Data::Dumper; my (%h); #Note this works with use strict. There is no @h array. This sets $h{a}, $h{b}, and $h{c}. @h{qw(a b c)} = (1, 2, 3); #Reset $h{b} just to make the point. $h{b} = 5; print '%h Hash:' . "\n"; print Dumper(\%h) . "\n\n"; #outputs: #%h Hash: #$VAR1 = { # 'c' => 3, # 'a' => 1, # 'b' => 5 # }; # # #%sorted Hash: #$VAR1 = {}; #