只是想知道如果我做错了什么或者如果这是一个Perl错误...我想创建一个哈希值的数组。我正在使用'push'将值放到数组中。首次向数组写入散列可以正常工作,但是当我将第二个不同的散列推入数组时,第一个数组元素似乎会被我刚刚推入数组的内容覆盖。这是为什么发生?请参见下面的代码:为什么将一个散列推入一个数组看起来会覆盖所有的数组元素?
use Data::Dumper;
my %val;
%val = (key1 => "Val1");
my @myArr;
my $cnt = push(@myArr,\%val);
print "After push (should contain 1 element): " . Dumper(@myArr) . "\n";
%val = (key2 => "Val2");
my $cnt = push(@myArr,\%val);
print "After push 2: (should contain 2 different elements):" . Dumper(@myArr) . "\n";
print " You can see above that element 1 and 2 of the array equal each other when they should be different\n";
只是一个旁注。但是你的“复制”只有在散列是字符串值的简单键时才有效。如果%val也包含arrayrefs或hashrefs,则需要“深度复制”。最好的办法是使用像“克隆”这样的模块。 http://search.cpan.org/perldoc?Clone – 2012-02-08 15:23:14