Perl SimpleXML:如何无键访问值

Perl SimpleXML:如何无键访问值,perl,hash,simplexml,Perl,Hash,Simplexml,我有一个XML文件,当我在我现在的$data->{Foo}上执行打印转储程序时,我得到以下输出 $VAR1 = [ { 'Bar' => { ...etc... } }, { 'Bar' => { ...etc2...

我有一个XML文件,当我在我现在的
$data->{Foo}
上执行
打印转储程序时,我得到以下输出

$VAR1 = [
          {
            'Bar' => { 
                       ...etc...
                     }
          },
          {
            'Bar' => {
                       ...etc2...
                     }
          }
         ];
如何打印第二栏下的内容?我试过:

$data->{Foo}{1}->{Bar}
但这是不正确的语法

谢谢


Dan

如果你漏掉了第一个'->',你会有麻烦的

如果说
$foo->[0]
Perl认为
foo
是一个标量,是对数组的引用,然后返回该引用数组的第一个元素

如果说
$foo[0]
Perl认为
foo
是一个数组,并返回它的第一个元素

您还需要注意
[]
{}
的区别<代码>[]
用于数组查找,
{}
用于哈希查找。Perl可以让数组相信它是一个哈希,如果它真的想这样做的话,有时会有令人惊讶的结果

因此,考虑到所有这些,你需要这样说:

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

或者更迂腐地说:

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


鉴于下面的评论,出于我认为非常明显的原因,首选第一种形式。有关更多详细信息,请参见
perldoc perlref
中的“使用引用”。

如果省略第一个'->',您将遇到麻烦

如果说
$foo->[0]
Perl认为
foo
是一个标量,是对数组的引用,然后返回该引用数组的第一个元素

如果说
$foo[0]
Perl认为
foo
是一个数组,并返回它的第一个元素

您还需要注意
[]
{}
的区别<代码>[]
用于数组查找,
{}
用于哈希查找。Perl可以让数组相信它是一个哈希,如果它真的想这样做的话,有时会有令人惊讶的结果

因此,考虑到所有这些,你需要这样说:

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

或者更迂腐地说:

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


鉴于下面的评论,出于我认为非常明显的原因,首选第一种形式。有关详细信息,请参见
perldoc perlref
中的“使用引用”。

还尝试了一些不同的变体:$data->{foo}->{bar}[1]$data->{foo}->{1}->{bar}
{bar}
{bar}
不同。请说出你的意思,说出你的意思。对不起,请原谅这个区分大小写的错误。现在已经更正。还尝试了一些不同的变体:$data->{foo}->{bar}[1]$data->{foo}->{1}->{bar}
{bar}
{bar}
不同。请说出你的意思,说出你的意思。对不起,请原谅这个区分大小写的错误。现在它被更正了。再看一次,你可能可以省去第一个之后的所有'->',结果是
$data->{Foo}[1]{Bar}你可以(我敢说应该)在第一次之后省去所有
->
$data->{Foo}[1]{Bar}
是一样的。是的,我认为应该是正确的。我最近刚刚使用了一些其他语言,直到我测试它时才100%使用。先发帖,后回答问题。:)再看一次,您可能能够省去第一个之后的所有'->',结果是
$data->{Foo}[1]{Bar}你可以(我敢说应该)在第一次之后省去所有
->
$data->{Foo}[1]{Bar}
是一样的。是的,我认为应该是正确的。我最近刚刚使用了一些其他语言,直到我测试它时才100%使用。先发帖,后回答问题。:)