2016-04-12 242 views
1

我正在以下面的格式查询输出。我需要获得itemthree的所有值。如何遍历包含哈希数组的哈希散列?

在尝试了很多不同的事情之后,我只能提取第一个值。我无法弄清楚如何在循环中运行它,以获取items元素中的所有itemthree的值。

这是我的数据

$VAR1 = { 

    one => { msgSize => 103 }, 

    two => { 
     items => [ 
      { itemOne => -1, itemthree => "AB_CD_EF", itemtwo => 0 }, 
      { itemOne => -1, itemthree => "XY_YZ_AB", itemtwo => 10 }, 
     ], 
    }, 

    someOtherStuff => "abc", 
} 
+0

是否使用'

my @item3s; for my $item (@{ $hash{two}{items} }){ push @item3s, $item->{itemthree}; } print "$_\n" for @item3s; 

如果它实际上是一个哈希引用,更改XML :: Simple'? – Borodin

+0

在Perl中使用嵌套数据结构是一种非常有用的技巧,我推荐使用Perl附带的[perlreftut dcocumentation](http://perldoc.perl.org/perlreftut.html)。但是,如果您尝试使用XML :: Simple作为@Borodin,并且怀疑然后我建议您遵循此[XML :: LibXML教程](http://grantm.github.io/perl-libxml-例如/)。 –

+0

我刚刚开始使用Perl,因此这种学习材料将非常有帮助。谢谢! – jaySingh

回答

1

转储假设你有一个哈希:$hash{two}{items}$hash->{two}{items}

+0

工作。谢谢。感谢帮助! – jaySingh

+0

不客气。如果它帮助你解决问题,请点击绿色复选标记接受答案。 – stevieb

+0

@jaySingh:虽然“有效”可能会导致令人鼓舞的“耶!”,但重要的是要了解正在发生的事情以及*为什么*该解决方案有效。 Perl代码是透明且可理解的,将程序视为一种“密码”可以让你进入你正在寻找的行为,这是错误的。这很像自然语言。我相信你可以在美索不达米亚可以点双威士忌,但这是一个空洞的成就,因为你必须重新开始要求两杯伏特加,一杯没有冰。如果你学习了苏美尔语,那么一切都会流向 – Borodin