Comment puis-je imprimer le contenu d'une table de hachage en Perl?
Je garde l'impression que mon hachage comme nombre de seaux /# alloué.
Comment puis-je imprimer le contenu de mon hash?
Sans l'aide d'un while
boucle serait le plus souhaitable (par exemple, un one-liner serait le mieux).
Vous devez vous connecter pour publier un commentaire.
Data::Dumper est votre ami.
sortie
&
opérateur en C et C++. La raison c'est important dans ce contexte est qu'en Perl, si vous appelez une fonction avec une valeur de hachage comme argument, que la valeur de hachage obtient listified et élargi dans plusieurs arguments - donc%hsh=("a" => 1, "b" => 2); foo(%hsh);
serait équivalent àfoo("a", 1, "b", 2)
. Si vous voulez plutôt la fonction d'opérer sur le hachage de lui-même, vous avez besoin de passer une référence à un hachage:foo(\%hsh);
Voir perldoc.perl.org/perlsub.html#Pass-by-ReferenceFacile:
Élégant, mais en réalité, 30% plus lent (!):
print "$_ $h{$_}\n" for (keys %h);
,$k
n'existe pas dans cet exemple.for
boucle est plus rapide que lawhile
jusqu'à au moins 10 000 clés: gist.github.com/151792Voici comment vous pouvez imprimer sans utiliser
Data::Dumper
À des fins de débogage, je vais souvent utiliser
YAML
.Résultats dans:
D'autres fois, je vais utiliser
Données::Dump
. Vous n'avez pas besoin de définir autant de variables pour l'obtenir à la sortie dans un beau format que vous faites pourData::Dumper
.Plus récemment, j'ai été en utilisant
Données::Imprimante
pour le débogage.( Résultat peut être beaucoup plus coloré sur un terminal )
Contrairement aux autres exemples que j'ai montré ici, celui-ci est conçu à des fins d'affichage uniquement. Qui se montre de plus en plus facilement si vous videz la structure de l'égalité de variable ou d'un objet.
=>
comme vous vous attendez. Au lieu de cela, il permet d'imprimer la clé, plusieurs espaces, et de la valeur. Ce qui permet à un homme de balayage sur la sortie.La réponse dépend de ce qui est dans votre code de hachage. Si vous avez un simple hash d'un simple
ou
fera, mais si vous avez une table de hachage qui est rempli avec des références que vous aurez quelque chose qui peut marcher ces références et de produire un bon de sortie. Cette marche des références est normalement appelé la sérialisation. Il existe de nombreux modules qui implémentent des styles différents, les plus populaires sont:
Data::Dumper
Données::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
En raison du fait que
Data::Dumper
est partie du noyau de la bibliothèque Perl, il est probablement le plus populaire; toutefois, certains des autres modules ont de très bonnes choses à offrir.Mon préféré: Smart::Commentaires
Que c'est.
use
Smart::Comments
, je le vois de cette perspective. Mais pour le compteur,Smart::Comments
est assez bien comportée comme une portée module, il ne devrait pas être le comportement de la sortie dans un module qui n'est pas aussi utilisation SC. Donc, le problème serait isolé de ces étendues avec un utilisation déclaration. Si vous êtes en train de dire qu'un entretien programmeur n'a pas la responsabilité de lire la doc sur les modules inclus, je ne peux pas d'accord. Encore, merci pour les commentairesLa façon la plus simple dans mes expériences, c'est simplement utiliser Dumpvalue.
Fonctionne comme un charme et que vous n'avez pas à vous soucier de la mise en forme de hachage, comme il les sorties comme le débogueur Perl n' (idéal pour le débogage). De Plus, Dumpvalue est inclus avec le stock ensemble de modules Perl, de sorte que vous n'avez pas de gâchis avec CPAN si vous êtes derrière une sorte de draconiennes proxy (comme je suis au travail).
Si vous voulez être pédant et de le conserver pour une ligne (sans utiliser des énoncés et shebang), alors je vais trier de piggy back-off de tétromino de répondre et de proposer:
Ne fais rien de spécial autre que l'aide de l'anonyme de hachage pour ignorer la variable temp 😉
Je ajouter un espace pour chaque élément de la table de hachage de le voir ainsi:
J'aime vraiment pour trier les touches en une ligne de code: