Je continue à imprimer mon hachage en tant que # de buckets / # alloué. Comment imprimer le contenu de mon hachage?
Sans utiliser une while
boucle serait le plus préférable (par exemple, une seule ligne serait le meilleur).
Je continue à imprimer mon hachage en tant que # de buckets / # alloué. Comment imprimer le contenu de mon hachage?
Sans utiliser une while
boucle serait le plus préférable (par exemple, une seule ligne serait le meilleur).
Data :: Dumper est votre ami.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
sortira
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
opérateur en C et C ++. La raison pour laquelle cela compte dans ce contexte est qu'en Perl, si vous appelez une fonction avec une valeur de hachage comme argument, cette valeur de hachage est listée et étendue en plusieurs arguments - ce%hsh=("a" => 1, "b" => 2); foo(%hsh);
serait donc équivalent àfoo("a", 1, "b", 2)
. Si vous souhaitez à la place que la fonction opère sur le hachage lui-même, vous devez passer une référence au hachage:foo(\%hsh);
Voir perldoc.perl.org/perlsub.html#Pass-by-ReferenceFacile:
Élégant, mais en fait 30% plus lent (!):
la source
print "$_ $h{$_}\n" for (keys %h);
,$k
n'existe pas dans cet exemple.for
boucle est plus rapide que leswhile
jusqu'à au moins 10 000 clés: gist.github.com/151792Voici comment imprimer sans utiliser
Data::Dumper
la source
À des fins de débogage, j'utiliserai souvent
YAML
.Résulte en:
D'autres fois, j'utiliserai
Data::Dump
. Vous n'avez pas besoin de définir autant de variables pour le faire sortir dans un bon format que vous le faites pourData::Dumper
.Plus récemment, j'ai utilisé
Data::Printer
pour le débogage.(Le résultat peut être beaucoup plus coloré sur un terminal)
Contrairement aux autres exemples que j'ai montrés ici, celui-ci est conçu explicitement pour être uniquement à des fins d'affichage. Ce qui apparaît plus facilement si vous videz la structure d'une variable liée ou celle d'un objet.
la source
=>
que vous attendez. Il imprime à la place toujours la clé, plusieurs espaces, puis la valeur. Ce qui aide un humain à analyser la sortie.La réponse dépend de ce que contient votre hachage. Si vous avez un simple hachage, un simple
ou
fera l'affaire, mais si vous avez un hachage rempli de références, vous obtiendrez quelque chose qui peut parcourir ces références et produire une sortie sensible. Cette marche des références est normalement appelée sérialisation. Il existe de nombreux modules qui implémentent différents styles, certains des plus populaires sont:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
Etant donné que cela
Data::Dumper
fait partie de la bibliothèque principale de Perl, c'est probablement la plus populaire; cependant, certains des autres modules ont de très bonnes choses à offrir.la source
Mon préféré: Smart :: Commentaires
C'est tout.
la source
use
Smart::Comments
, je le vois aussi de ce point de vue. Mais au comptoir,Smart::Comments
est assez bien comportée comme un scope module, il ne devrait pas être un comportement de sortie dans un module qui ne aussi utiliser SC. Ainsi, le problème serait isolé de ces portées avec une instruction use . Si vous dites qu'un programmeur de maintenance n'a aucune responsabilité de lire la documentation sur les modules inclus, je ne peux pas être d'accord. Encore, merci pour vos commentairesBoucle:
Fonctionnel
Mais pour l'élégance pure, je devrais choisir celui de wrang-wrang. Pour mon propre code, je choisirais mon foreach. Ou l'utilisation du Dumper de Tetro.
la source
foreach
etmap
.map
devrait être utilisé pour les transformations de liste, pas dans un contexte vide pour émuler une boucleLe moyen le plus simple dans mes expériences est d'utiliser simplement Dumpvalue .
Fonctionne comme un charme et vous n'avez pas à vous soucier du formatage du hachage, car il le produit comme le débogueur Perl (idéal pour le débogage). De plus, Dumpvalue est inclus avec l'ensemble de modules Perl, vous n'avez donc pas à vous soucier du CPAN si vous êtes derrière une sorte de proxy draconien (comme je suis au travail).
la source
Si vous voulez être pédant et vous en tenir à une seule ligne (sans instructions d'utilisation ni shebang), alors je vais en quelque sorte reprendre la réponse de tétromino et suggérer:
Ne rien faire de spécial autre que d'utiliser le hachage anonyme pour ignorer la variable temporaire;)
la source
J'ajoute un espace pour chaque élément du hachage pour bien le voir:
la source
J'aime vraiment trier les clés dans un code de doublure:
la source