2016-07-25 6 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' 
       } 
       ] 
    }; 

Мой вопрос: как взять данные и распечатать один к одному? Я хочу напечатать имя, тег и дольку. Для моего программного обеспечения необходимо взять имя магазина и больше данных, например, тип

+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 содержит массив хэшей и т. Д. И, видимо, где вы упоминаете «имя», вы подразумеваете «контент» по языку. Точно так же кажется, что где вы упоминаете «тег», вы имеете в виду «тип». Мой ответ будет основан на этих предположениях.

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 страниц документации, которые могут быть полезными для вас в будущем, как вы научитесь управлять ссылки и datastructures с Perl: perlreftut, perlref и perldsc. Доступ к ним из вашей собственной системы, например, perldoc perlreftut.

 Смежные вопросы

  • Нет связанных вопросов^_^