只是想知道我是在做错什么还是这是一个perl错误...我想创建一个哈希值数组。我正在使用“推”将值放到数组上。第一次向数组中写入哈希值可以很好地工作,但是当我将另一个哈希值压入数组时,第一个数组元素似乎被我刚刚压入数组的内容所覆盖。为什么会这样呢?请参见下面的代码:
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";
最佳答案
“perl bug”-是的,发胖的机会。 :-)
您正在将对哈希的引用推送到数组中,然后更改该哈希,然后再次推送相同的引用。
您可能需要一个副本或一个完全不同的哈希:
不同的变量:
#!/usr/bin/perl
use strict; # always use strict
use warnings;
use Data::Dumper;
my ( %val, %other_val, @myArr );
%val = ( key1 => "Val1" );
%other_val = ( key2 => "Val2" );
push(@myArr, \%val);
push(@myArr, \%other_val);
print Dumper(\@myArr) . "\n";
复制中:
#!/usr/bin/perl
use strict; # always use strict
use warnings;
use Data::Dumper;
my ( %val, %other_val, @myArr );
%val = ( key1 => "Val1" );
push(@myArr, { %val } );
%val = ( key2 => "Val2" );
push(@myArr, { %val } );
print Dumper(\@myArr) . "\n";