我是Perl的新手,我很难在哈希中迭代哈希数组。我试过this solution这是Dumper的数据结构:
1234 => {
'items' => [
#0 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
#1 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
#2 {
'k1' => { 'x1' => '123', 'x2' => '321' },
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4'
},
],
}
这是我的代码。我想迭代哈希'%myHash'同时可以访问键和值。然后对于"项目中的每个哈希"数组我想执行一些操作。
在这种情况下,我的密钥是' 1234'它的值是一个包含密钥'项目的哈希值。这是我的代码(散列的引用被传递给我的sub):
sub iterateHash {
my %myHash = @_;
while (my ($key, $value) = each %myHash) {
my %newHash;
foreach my $item (@{ $value->{'items'} }) {
if( !(defined $newHash{'nk1'}) ) {
$newHash{'nk1'} = $item{'k1'}{'x2'};
}
}
}
}
以及如何调用它:
my $results = iterateHash(\%myHash);
我后来使用了密钥,这就是为什么我想在外部while循环中访问一对中的键和值,但是现在我想让这部分工作。
这是我得到的错误:
Global symbol "%item" requires explicit package name
答案 0 :(得分:2)
您传递了引用但未将其视为iterateHash
中的引用。此外,一旦进入嵌套结构,一切都是引用,因此$item
是哈希引用而不是普通哈希。
sub iterateHash {
my ($myHash) = @_;
while (my ($key, $value) = each %$myHash) {
my %newHash;
foreach my $item (@{ $value->{'items'} }) {
if( !(defined $newHash{'nk1'}) ) {
$newHash{'nk1'} = $item->{'k1'}->{'x2'};
}
}
}
}