2012-05-03 44 views
0

我有一個XML文件,當我在我現在的$data->{Foo}上執行print Dumper時,我得到以下輸出。Perl SimpleXML:如何訪問沒有密鑰的值

$VAR1 = [ 
      { 
      'Bar' => { 
         ...etc... 
        } 
      }, 
      { 
      'Bar' => { 
         ...etc2... 
        } 
      } 
     ]; 

如何打印第二個Bar下的內容?我試過了:

$data->{Foo}{1}->{Bar} 

但是這是不正確的語法。

感謝,

+0

也嘗試了幾種不同的變體: $數據 - > {FOO} - > {欄} [1] $數據 - > {FOO} - > {1} - > {欄} – dlite922

+2

'{欄}'與「{Bar}」不同。請說出你的意思,並表達你的意思。 – mob

+0

對不起,請原諒大小寫錯誤。它現在已經被糾正了。 – dlite922

回答

4

你會惹上麻煩,如果你離開了一個 ' - >'。

如果您說$foo->[0] Perl認爲foo是一個標量,它是對數組的引用,然後返回該引用數組的第一個元素。

如果你說$foo[0] Perl認爲foo是一個數組,並返回它的第一個元素。

您還需要注意[]{}[]用於數組查找,{}用於散列查找。 Perl可以說服一個數組,如果它真的想要它就是一個散列,有時候會有驚人的結果。

因此,考慮到這一切,你需要說這樣的事情:

$data->{Foo}[1]{Bar};

以上迂腐:

$data->{Foo}->[1]->{Bar};

給出下面的意見,第一種形式是首選因爲我認爲這是非常明顯的原因。請參閱perldoc perlref中的「使用參考」瞭解更多詳情。

+0

再看一遍,你可能會在第一個之後忽略所有的' - >',導致'$ data - > {Foo} [1] {Bar};' –

+5

你可以(並且我敢說*應該*)在第一個之後省略所有' - >'。 '$ data - > {Foo} [1] {Bar}'是同樣的事情。 – derobert

+0

是的,我認爲應該是正確的。我最近剛剛使用了其他幾種語言,在我測試之前並不是100%。首先發帖,稍後再回答問題。 :) –