正确处理hashrefs数组

时间:2014-06-06 06:20:33

标签: perl

我的代码中有一张地图列表。

my @codeList;
push (@codeList, \%map1, \%map2, \%map3);

当我试图通过循环List索引来访问它时,它没有给我正确的地图。 我错过了什么

my $Count = @codeList;
for (my $index =0; $index < $Count; $index++)
{
    my %map = $codeList[$index];                
} 

2 个答案:

答案 0 :(得分:2)

您的代码运行正常。我认为它是你的循环(你没有告诉我们)。您可以通过取消引用hashref(%{ $hashref }):

来遍历此操作
use strict;
use warnings;
use feature 'say';

my %map1 = (test1 => 'ab');
my %map2 = (test2 => 'ab');
my %map3 = (test2 => 'ab');

my @codeList;
push (@codeList, \%map1, \%map2, \%map3);

for my $hashref (@codeList) {
  for my $key (keys %{$hashref}) {
    say $key . q{ } . $hashref->{$key};
  }
}

编辑输出:

test1 ab
test2 ab
test2 ab

答案 1 :(得分:2)

而不是

my %map = $dbColsList[$dbCount]; 

你必须使用引用,因为@codeList填充了它们=&gt; \%map1

my $map = $dbColsList[$dbCount]; 

以后使用$map->{key},因为它是array of hashes或hashref结构。

查看perldoc了解详情。

或者,您可以取消引用hashref并执行浅层复制(更改为%map键/值不会反映在\%map1等上。)

my %map = %{ $dbColsList[$dbCount] };