代码之家  ›  专栏  ›  技术社区  ›  CheeseConQueso

需要从Perl中变量元素的哈希数组构建foreach语句

  •  1
  • CheeseConQueso  · 技术社区  · 14 年前

    我在用 XML::Simple 在Perl中,通过XML文件进行解析,我一直在研究如何构建一个循环来遍历哈希中数组的所有可能元素。

    下面是如何打印数组的第0个元素:

    print $book_info->{BookList}->{BookData}->{Prices}->{Price}[0]->{is_new};
    

    当使用hash和array这两个词时,我的术语可能会被禁用,但是我正在尝试循环遍历其中的所有元素 {Price}[$ref]

    我试过:

    my @refs = $book_info->{BookList}->{BookData}->{Prices}->{Price};
    foreach(@refs)
    {
        print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]->{store_id};
        print "\n";
    }
    


    foreach my $key (keys (%{$book_info->{BookList}->{BookData}->{Prices}->{Price}}))
    {
        print $key."\n";
    }
    


    下一个print语句返回一个值 "ARRAY(0x159a57c)"

       print [$book_info->{BookList}->{BookData}->{Prices}->{Price}];
    


    这对foreach有效,但我无法正确访问元素:
    foreach (@{$book_info->{BookList}->{BookData}->{Prices}->{Price}})
    {
        print $book_info->{BookList}->{BookData}->{Prices}->{Price}[$_]; #this line is wrong
    }
    

    有什么建议吗?有多个 {Price} 中的元素 {Prices} 元素,以及每个 {价格} 元素具有 [x] XML中的属性。

    3 回复  |  直到 14 年前
        1
  •  3
  •   ysth    14 年前

    人们不太适合你。如果我没听错,你想:

    foreach my $element ( @{ $book_info->{BookList}->{BookData}->{Prices}->{Price} } ) {
        print $element->{store_id};
        print "\n";
    }
    

    有关处理嵌套数据结构的有用建议,请访问 http://perlmonks.org/?node=References+quick+reference

        2
  •  2
  •   Community CDub    8 年前

    边缘延伸 ysth 的答案:

    foreach my $elem_ref (@{$book_info->{BookList}->{BookData}->{Prices}->{Price}})
    {
        foreach my $key (sort keys %{$elem_ref})
        {
            print $elem_ref->{$key};
        }
        print "\n";
    }
    

    在某种程度上,它使用Perl最佳实践的建议来表示带有后缀的引用 _ref .

        3
  •  0
  •   hartem    14 年前

    是否尝试用Data::Dumper转储$book_info的内容(使用Data::Dumper;print Dumper($book_info)?它应该能给你一个如何进行的线索。