Puede ser necesario volcar una estructura de datos por pantalla, salida estándar o archivo al desarrollar scripts Perl para depurar errores o registrar eventos. Este artículo explica cómo hacerlo.



Supongamos que tenemos una estructura $nombres que consiste en un hash (conjunto de pares clave/valor) en Perl:

#!/usr/bin/perl

$nombres = {0 => "Juan", 1 => "Pedro", 2 => "Ana", 3 => "María"};

print "$nombres\n";

Si se desea imprimir el contenido del hash se obtiene una salida como la siguiente:

emi@vaio:/tmp$ ./test.pl 
HASH(0x55a420844278)

Esto se debe a que se trata de una estructura de datos compleja que no puede ser interpretada por la función print sino que debe ser recorrida de forma iterativa. Sólo se imprime su hash.

Para imprimir estructuras de datos complejas de forma sencilla se debe recurrir al módulo Data::Dumper. Este permite imprimir por salida estándar una estructura compleja de forma amigable y legible.

Invocar al módulo mediante la línea use Data::Dumper; e invocar al método Dumper():

#!/usr/bin/perl

use Data::Dumper;

$nombres = {0 => "Juan", 1 => "Pedro", 2 => "Ana", 3 => "María"};

print Dumper($nombres);

Ahora se obtiene un volcado de la estructura de forma legible:

emi@vaio:/tmp$ ./test.pl
$VAR1 = {
          '3' => 'María',
          '2' => 'Ana',
          '1' => 'Pedro',
          '0' => 'Juan'
        };

Este módulo a su vez tiene muchas opciones para variar la salida. Veamos algunos ejemplos:

#!/usr/bin/perl

use Data::Dumper;

$nombres = {0 => "Juan", 1 => "Pedro", 2 => "Ana", 3 => "María"};

$Data::Dumper::Indent = 0;
print Dumper($nombres);
print "\n";
$Data::Dumper::Indent = 1;
print Dumper($nombres);
print "\n";
$Data::Dumper::Indent = 3;
print Dumper($nombres);
print "\n";
$Data::Dumper::Pair = " : ";
print Dumper($nombres);
print "\n";
$Data::Dumper::Terse = 1;
print Dumper($nombres);
print "\n";

La opción Indent permite modificar el tipo de indentación, Pair altera el caracter o secuencia utilizada para separar los pares y Terse elimina los nombres de variables cuando es posible, tal como se observa a continuación:

emi@vaio:/tmp$ ./test.pl
$VAR1 = {'2' => 'Ana','0' => 'Juan','1' => 'Pedro','3' => 'María'};
$VAR1 = {
  '2' => 'Ana',
  '0' => 'Juan',
  '1' => 'Pedro',
  '3' => 'María'
};

$VAR1 = {
          '2' => 'Ana',
          '0' => 'Juan',
          '1' => 'Pedro',
          '3' => 'María'
        };

$VAR1 = {
          '2' : 'Ana',
          '0' : 'Juan',
          '1' : 'Pedro',
          '3' : 'María'
        };

{
  '2' : 'Ana',
  '0' : 'Juan',
  '1' : 'Pedro',
  '3' : 'María'
}

Para más información, acceder a la documentación del módulo Data::Dumper en el siguiente enlace:


Tal vez pueda interesarte


Compartí este artículo