Por ejemplo, dado el paquete Test
:
lhp@nereida:~/Lperl/src/advanced_perl_programming/Typeglob$ cat -n dumpvar.pl 41 package Test; 42 our $x = 10; 43 our @y = (1,3,4); 44 our %z = (1,2,3,4, 5, 6); 45 our $z = 300; 46 our $f = sub { 1; };
la llamada:
48 DumpPackage::dumpackage("Test");
producirá una salida similar a:
lhp@nereida:~/Lperl/src/advanced_perl_programming/Typeglob$ dumppackage.pl y Lista @y: [ 1, 3, 4 ] ============================= __ANON__ ============================= x Escalar $x: 10 ============================= f Escalar $f: sub { package Test; use strict 'refs'; 1; } ============================= z Escalar $z: 300 Hash %z: { 1 => 2, 3 => 4, 5 => 6 } =============================
Para imprimir una estructura de datos compleja existen varias soluciones.
Puede usar
el módulo Data::Dumper
para volcar las estructuras de datos
resultantes. Consulte la documentación del módulo.
Puede partir del esqueleto que sigue. Las líneas de puntos indican lugares en los que deberá insertar el código apropiado.
lhp@nereida:~/Lperl/src/advanced_perl_programming/Typeglob$ cat -n dumppackage.pl 1 #!/usr/local/bin/perl -w 2 use strict; 3 4 package DumpPackage; 5 use Data::Dumper; 6 7 $Data::Dumper::Terse = 1; 8 $Data::Dumper::Deparse = 1; 9 10 sub dumpackage { 11 my ($packageName) = @_; 12 my $rPackage; 13 { 14 ................. 15 $rPackage = \%{"${packageName}::"}; # Obtener la referencia al stash 16 } 17 $, = " "; 18 while (my ($varName, $globValue) = each %$rPackage) { 19 print "$varName\n"; 20 our ($..., @..., %...); 21 *var = $globValue; # Crear un alias 22 if (defined ($var)) { .. .................................. 25 } 26 if (defined (@var)) { .. .................................. 30 } 31 if (defined (%var)) { .. .................................. 35 } 36 print "============================= \n"; 37 } 38 }
Casiano Rodríguez León