2016-07-25 2 views
0

j'ai cette structure avec des données-dumper:données d'impression après dumper

$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' 
       } 
       ] 
    }; 

Ma question est la suivante: comment prendre des données et imprimer un pour un? Je veux imprimer le nom, le tag et le valore. Pour mon logiciel est nécessaire prendre le nom de la boutique et plus de données par exemple le type

+3

Si je vous ai bien compris, vous voulez savoir comment accéder aux valeurs de votre structure de données. Vous voulez parcourir la référence et les clés d'accès au tableau _field_ dans les références de hachage qui sont les éléments de _field_. Je vous suggère de lire [perlreftut] (http://perldoc.perl.org/perlreftut.html) et [perlref] (http://perldoc.perl.org/perlref.html) pour une introduction aux structures de données en Perl. – simbabque

+0

Est-ce que ces données proviennent de XML? Comment générez-vous cela? – Borodin

+0

Il n'y a pas de champ de nom. Voulez-vous dire contenu? Comment voulez-vous gérer une langue avec un tableau vide? Comment voulez-vous gérer un langage avec plus d'un élément dans le tableau? – ikegami

Répondre

4

Il semble que la structure est un hashref contenant un arrayref de hachages, et ainsi de suite. Et apparemment, lorsque vous mentionnez «nom», vous voulez dire «contenu» par langue. De même, il semble que lorsque vous mentionnez «tag», vous voulez dire «type». Ma réponse sera basée sur ces hypothèses.

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

Le -> entre {content} et {en}, et encore entre {en} et [0] sont facultatifs, et une question de style.

Si vous voulez simplement accéder aux éléments directement (ce qui précède, la boucle), vous pouvez le faire comme ceci:

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

Si vous souhaitez imprimer toutes les langues, vous pouvez le faire:

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

Il y a plusieurs pages de documentation Perl qui pourraient être utiles dans l'avenir que vous apprendrez à manipuler des références et avec Perl datastructures: perlreftut, perlref et perldsc. Accédez-les à partir de votre propre système comme perldoc perlreftut, par exemple.