我的代码中有一张地图列表。
my @codeList;
push (@codeList, \%map1, \%map2, \%map3);
当我试图通过循环List索引来访问它时,它没有给我正确的地图。 我错过了什么
my $Count = @codeList;
for (my $index =0; $index < $Count; $index++)
{
my %map = $codeList[$index];
}
答案 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] };