Como imprimir o hash em Perl

Na linguagem de programação Perl, por vezes, ocorre a necessidade de imprimir o conteúdo de um hash.

Por exemplo, há hash %h com o seguinte conteúdo:

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

Dependendo do que você deseja, existem algumas maneiras de como você pode imprimir hash.

O uso de Data::Dumper

No caso de se pretender ver rapidamente o que está contido na хеше, para é conveniente usar o módulo Data::Dumper. Isto pode vir a calhar durante o desenvolvimento ou a depuração de um programa.

Aqui está um exemplo de código:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

print Dumper \%h;

Isso é o que exibe este programa:

$VAR1 = {
          'Bob' => 'yellow',
          'Alice' => 'silver',
          'John' => 'red'
        };

Hash armazena, em si, não organizados pares de valores. Diferente de executar o programa de será a saída do par em uma ordem diferente.

O uso de print

E o que vai se basta enviar o hash em print?

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

print %h;

O programa apresenta uma linha do tipo:

JohnredBobyellowAlicesilver

Visto que neste caso print tirou na tela juntos todos os pares chave-valor a partir do hash. Hash armazena, em si, não organizados pares de valores. Diferentes execuções do programa vai dar a diferente conclusão.

print e a variável $,

Se especificar apenas print %h;, isso imprimirá todos os pares chave-valor juntos. Você pode pedir a um perl de inserir uma espécie de símbolo de entre os elementos. Por exemplo, um caractere de nova linha \n.

Para isso, você precisa colocar este símbolo em uma variável especial $,. Aqui está o código:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

$, = "\n";

print %h;

Um dos possíveis resultados da execução do programa (dados хеше não ordenadas, portanto, diferentes lançamentos de saída pares em ordem diferente):

Bob
yellow
Alice
silver
John
red

Mas este método precisa usar com cuidado. A variável $, global. Se você muda, então ele muda para todo o programa. Em algumas situações faz sentido ou não usar o tal maneira, ou manter o valor esta variável em uma variável temporária e, depois de print de retornar o seu valor, por exemplo, assim:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

my $saved = $,;

$, = "\n";

print %h;

$, = $saved;

Iteração de хешу

O mais poderoso e flexível, a maneira de como exibir o conteúdo de hash tela — é a passar por todos os valores em хеше e para retirar, na tela da forma como você precisa. Aqui está um exemplo de como isso pode ser feito:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

my %h = (
    John => 'red',
    Alice => 'silver',
    Bob => 'yellow',
);

foreach my $name (sort keys %h) {
    say "$name $h{$name}";
}

A saída do programa é sempre a mesma:

Alice silver
Bob yellow
John red

Para pares de valores em хеше ordem indefinido, mas este programa é usado sort para o para exibir as chaves em ordem alfabética.

Temas relacionados

Outros artigos