2016-04-12 179 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