[英]Iterating over an array of hashes inside of a hash
我是Perl的新手,我很难遍历哈希内部的一系列哈希。 我尝试过此解决方案这是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”,其值是包含键“ items”的哈希。 这是我的代码(将对哈希的引用传递给我的子对象):
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
您传递了一个引用,但未将其像iterateHash
的引用一样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'};
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.