哈希键仅存储循环的最后一个元素

3

我试图将数组值存储在哈希表中,但是在 for 循环中,哈希键只存储了数组的最后一个值。

我的期望输出是,“STORE”键应该拥有所有的数组元素。 我知道还有其他几种方法可以将数组值存储在哈希表中,但我很好奇为什么下面的脚本不起作用。

use strict;
use warnings;
use Data::Dumper;

my @array = (1,2,3);
my %record;

for my $array(@array) {
    $record{"STORE"} = $array;
}
print Dumper \%record;

如果您知道$record{"STORE"}是一个标量值,并且您正在使用=进行标量赋值,那么它与例如$foo = $array相同,您不应该感到惊讶,因为它将在每次循环迭代中被覆盖。 - TLP
1个回答

4

哈希表只保留了数组的最后一个值,因为在 for 循环中您不断覆盖该值。

存储数组中所有值的一种方法是:

use strict;
use warnings;
use Data::Dumper;

my @array = (1,2,3);
my %record;

for my $array (@array) {
    push @{ $record{"STORE"} }, $array;
}

print Dumper \%record;

这将数组保存为引用。

$VAR1 = {
          'STORE' => [
                       1,
                       2,
                       3
                     ]
        };

存储整个数组的另一种方法是将其赋值给数组引用:

my @array = (1,2,3);
my %record;

$record{"STORE"} = [@array];

print Dumper \%record;

请参考perldsc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接