如何在perl中的哈希数组中向哈希添加新的Key,Value对?

时间:2014-01-18 01:19:03

标签: perl hash

您好我需要为哈希数组中的哈希条目添加新的键值对。 下面是一些不起作用的示例代码(仅使用1个数组条目简化)print语句的输出只包含1个条目。

my @AoH;
push @AoH, { TEST1 => 'testvalue'  };
for my $hash (@AoH)
{
$hash{'TEST2'} = 'testvalue2';
print Dumper($hash);
}

我做错了什么?

谢谢。

2 个答案:

答案 0 :(得分:4)

这段代码看起来有点奇怪,所以我假设这样做是为了在这里简要介绍一下,但是修改代码需要做的主要是改变:

$hash{'TEST2'} = 'testvalue2';

为:

$$hash{'TEST2'} = 'testvalue2';

或:

$hash->{'TEST2'} = 'testvalue2';

额外的'$'或' - >'取消引用哈希引用'$ hash'。由于两者都不存在,它将$ hash {'TEST2'}视为一个不同的变量:'%hash'(不是'$ hash')并为其指定'testvalue2'。你会得到一个很好的错误信息:

Global symbol "%hash" requires explicit package name at - line XX

如果您尝试使用以下命令运行此代码:

use strict;
use warnings;

一开始......你应该一直这样做,所以从现在开始每次都这样做。

答案 1 :(得分:0)

use strict;
use warnings;
use Data::Dumper;
my @AoH=();
my %data_source_hash=(
TEST1 => 'testvalue1',
TEST2 => 'testvalue2'
);

# adds whole hash as the array element
push @AoH,{ %data_source_hash };

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds each hash $key, $value pair as an element 

while ( my ($key, $value) = each %data_source_hash )
{
push @AoH, { $key => $value  };
}

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds extra hash entry to each array element

push @AoH, { TEST1 => 'testvalue'  };
push @AoH, { TEST3 => 'testvalue3'  };
foreach my $el (@AoH)
{
 my $key = 'TEST2';
 $$el{$key} = $data_source_hash{$key};
}
print Dumper(@AoH);