只是想知道我是在做错什么还是这是一个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";

10-07 14:23
查看更多