Cómo imprimir el hash en Perl

En el lenguaje de programación Perl, a veces surge la necesidad de imprimir el contenido de un hash.

Por ejemplo, hay un hash %h con el siguiente contenido:

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

En función de lo que requiere, hay varias maneras de cómo se puede imprimir hash.

El uso de Data::Dumper

Si desea ver rápidamente lo que está contenido en хеше, para ello es conveniente utilizar el módulo de Data::Dumper. Esto puede ser útil en el proceso de desarrollo o de depuración del programa.

He aquí un ejemplo 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;

Eso es lo que sacará de este programa:

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

Hash mantiene en sí mismo no pares ordenados de valores. Diferentes ejecutar el programa será sacar los vapores en el mismo orden.

El uso de print

¿Y si simplemente pasar el hash en print?

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

print %h;

El programa mostrará una línea similar a:

JohnredBobyellowAlicesilver

Se ve que en este caso print saco en la pantalla se quedan pegadas todos los pares clave-valor de hash. Hash mantiene en sí mismo no pares ordenados de valores. Diferentes ejecuciones del programa emitirá diferente de la conclusión.

print y la variable $,

Si sólo tiene que especificar el print %h;, esto imprimirá todos los pares clave-valor que se quedan pegadas. Puede pedir perl insertar un símbolo entre los elementos. Por ejemplo, el carácter de nueva línea \n.

Para ello, es necesario colocar este símbolo en la variable especial $,. Aquí está el código:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

$, = "\n";

print %h;

Uno de los resultados posibles de trabajo (datos en хеше no están ordenados, por lo que diferentes ejecuciones se retirarán de la pareja en el mismo orden):

Bob
yellow
Alice
silver
John
red

Pero este método debe utilizar con cuidado. La variable $, global. Si se cambia, se cambia para todo el programa. En algunas situaciones tiene sentido o no utilizar este método, o mantener el valor de la de esta variable en la variable temporal, y después de print devolver en ella el valor, por ejemplo, así:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

my $saved = $,;

$, = "\n";

print %h;

$, = $saved;

Итерирование de хешу

La más potente y flexible manera de cómo mostrar el contenido de un hash de la pantalla es pasar por todos los valores en хеше y sacar de la pantalla en la forma como se desee. He aquí un ejemplo de cómo se puede hacer:

▶ 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}";
}

La salida del programa es siempre el mismo:

Alice silver
Bob yellow
John red

Para los pares de valores en хеше el orden de incertidumbre, pero en este programa se utiliza sort para que para ver las claves en orden alfabético.

Temas relacionados

Otros articulos