只是想知道如果我做錯了什麼或者如果這是一個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