2016-07-25 75 views
0

后,我有这样的结构,数据自卸车:打印数据自卸车

$VAR1 = { 
     'field' => [ 
       { 
        'content' => { 
           'en' => [ 
             'Footware haberdashery leather goods' 
             ], 
           'de' => [ 
             'Schuhe Kurzwaren und Lederartikel' 
             ], 
           'it' => [ 
             'Calzature mercerie e pelletterie' 
             ] 
           }, 
        'type' => 'tag', 
        'valore' => 'TAG3' 
       }, 
       { 
        'content' => { 
           'en' => [ 
             'Cobbler' 
             ], 
           'de' => [ 
             'Schuster' 
             ], 
           'it' => [ 
             'Calzolai' 
             ] 
           }, 
        'type' => 'tag', 
        'valore' => 'TAG24' 
       } 
       ] 
    }; 

我的问题是:如何利用数据和打印一对一? 我想打印名称,标签和valore。 对于我的软件是必要的商店名称和更多的数据,例如类型

+3

如果我理解正确,您想知道如何访问数据结构中的值。你想遍历作为_field_元素的散列引用中的_field_数组引用和访问键。我建议你阅读[perlreftut](http://perldoc.perl.org/perlreftut.html)和[perlref](http://perldoc.perl.org/perlref.html),了解Perl中的数据结构。 – simbabque

+0

这个数据是否起源于XML?你是如何产生它的? – Borodin

+0

没有名称字段。你的意思是内容吗?你想如何处理一个空数组的语言?你想如何处理数组中有多个元素的语言? – ikegami

回答

4

它看起来像结构是一个hashref包含散列的arrayref,等等。显然你提到“名字”的地方是指语言的“内容”。同样,看起来你提到'标签'的意思是'类型'。我的答案将基于这些假设。

foreach my $rec (@{$href->{field}}) { 
    print "$rec->{content}->{en}->[0]: $rec->{type}, $rec->{valore}\n"; 
} 

{content}{en},并再次之间的->{en}[0]之间是可选的,一个风格问题。

如果你只是想直接访问元素(前述的循环),你可能会做这样的:如果你要打印所有语言

print $href->{field}->[0]->{content}->{en}->[0], "\n"; 
print $href->{field}->[0]->{type}, "\n"; 
print $href->{field}->[0]->{valore}, "\n"; 

,你可以这样做:

foreach my $rec (@{$href->{field}}) { 
    print $rec->{content}->{$_}->[0], "\n" foreach sort keys %{$rec->{content}}; 
    print $rec->{type}, "\n"; 
    print $rec->{valor}, "\n\n"; 
} 

有几个Perl文档的页面,可能是在以后的使用给你的,你要学会操纵引用和数据结构用Perl:perlreftutperlref,并perldsc。例如,从您自己的系统访问它们,例如perldoc perlreftut