189 votes

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'une boucle while serait plus préférable (ex: une ligne serait le mieux)

281voto

tetromino Points 1407

Data::Dumper est votre ami.

use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);

seront de sortie

$VAR1 = {
          'def' => [
                     4,
                     5,
                     6
                   ],
          'abc' => 123
        };

71voto

Jonathan Graehl Points 6460

facile:

print "$_ $h{$_}\n" for (keys %h);

élégant mais en réalité, 30% plus lent (!):

while (my ($k,$v)=each %h){print "$k $v\n"}

43voto

daa Points 2202

Voici comment vous pouvez imprimer sans utiliser la Data::Dumper

print "@{[%hash]}";

27voto

Brad Gilbert Points 12724

À des fins de débogage, je vais souvent utiliser YAML.

use strict;
use warnings;

use YAML;

my %variable = ('abc' => 123, 'def' => [4,5,6]);

print "# %variable\n", Dump \%variable;

Résultats:

# %variable
---
abc: 123
def:
  - 4
  - 5
  - 6

D'autres fois, je vais utiliser Data::Dump. Vous n'avez pas besoin de définir autant de variables pour l'obtenir à la sortie dans un beau format que vous faites pour Data::Dumper.

use Data::Dump = 'dump';

print dump(\%variable), "\n";
{ abc => 123, def => [4, 5, 6] }

Plus récemment, j'ai été en utilisant Data::Printer pour le débogage.

use Data::Printer;
p %variable;
{
    abc   123,
    def   [
        [0] 4,
        [1] 5,
        [2] 6
    ]
}

( Le 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.

use strict;
use warnings;

use MTie::Hash;
use Data::Printer;

my $h = tie my %h, "Tie::StdHash";
@h{'a'..'d'}='A'..'D';
p %h;
print "\n";
p $h;
{
    a   "A",
    b   "B",
    c   "C",
    d   "D"
} (tied to Tie::StdHash)

Tie::StdHash  {
    public methods (9) : CLEAR, DELETE, EXISTS, FETCH, FIRSTKEY, NEXTKEY, SCALAR, STORE, TIEHASH
    private methods (0)
    internals: {
        a   "A",
        b   "B",
        c   "C",
        d   "D"
    }
}

10voto

Axeman Points 24103

Mon préféré: Smart::Commentaires

use Smart::Comments;
# ...

### %hash

C'est tout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X