Sigo imprimiendo mi hash como # de cubos / # asignado. ¿Cómo imprimo el contenido de mi hash?
Sin usar un while
bucle sería más preferible (por ejemplo, una línea sería lo mejor).
Datos :: Dumper es tu amigo.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
saldrá
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
&
operador en C y C ++. La razón por la que importa en este contexto es que en Perl, si llama a una función con un valor hash como argumento, ese valor hash se enumera y se expande en múltiples argumentos, por%hsh=("a" => 1, "b" => 2); foo(%hsh);
lo que sería equivalente afoo("a", 1, "b", 2)
. Si, en cambio, desea que la función funcione en el hash, debe pasar una referencia al hash:foo(\%hsh);
consulte perldoc.perl.org/perlsub.html#Pass-by-ReferenceFácil:
Elegante, pero en realidad un 30% más lento (!):
fuente
print "$_ $h{$_}\n" for (keys %h);
,$k
no existe en ese ejemplo.for
bucle es más rápido quewhile
hasta al menos 10,000 teclas: gist.github.com/151792Aquí cómo puede imprimir sin usar
Data::Dumper
fuente
Para fines de depuración, a menudo lo usaré
YAML
.Resultados en:
Otras veces lo usaré
Data::Dump
. No necesita establecer tantas variables para que salga en un formato agradable del que tieneData::Dumper
.Más recientemente, he estado usando
Data::Printer
para depurar.(El resultado puede ser mucho más colorido en una terminal)
A diferencia de los otros ejemplos que he mostrado aquí, este está diseñado explícitamente para fines de visualización únicamente. Lo que se muestra más fácilmente si deshace la estructura de una variable vinculada o la de un objeto.
fuente
=>
como esperabas. En su lugar, siempre imprime la clave, varios espacios y luego el valor. Lo que ayuda a un humano a escanear sobre la salida.La respuesta depende de lo que haya en tu hash. Si tienes un hash simple, un simple
o
funcionará, pero si tiene un hash que está lleno de referencias, tendrá algo que puede recorrer esas referencias y producir una salida sensata. Este recorrido de las referencias normalmente se llama serialización. Hay muchos módulos que implementan diferentes estilos, algunos de los más populares son:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
Debido al hecho de que
Data::Dumper
es parte de la biblioteca principal de Perl, es probablemente la más popular; sin embargo, algunos de los otros módulos tienen cosas muy buenas que ofrecer.fuente
Mi favorito: Smart :: Comentarios
Eso es.
fuente
use
Smart::Comments
, también lo veo desde esa perspectiva. Pero para el contador,Smart::Comments
se comporta bastante bien como un módulo de ámbito , no debería haber comportamiento de salida en ningún módulo que no use también SC. Entonces, el problema estaría aislado de esos ámbitos con una declaración de uso . Si está diciendo que un programador de mantenimiento no tiene la responsabilidad de leer el documento en los módulos incluidos, no puedo estar de acuerdo. Aún así, gracias por comentarBucle:
Funcional
Pero por pura elegancia, tendría que elegir wrang-wrang's. Para mi propio código, elegiría mi foreach. O el uso de Dumper de Tetro.
fuente
foreach
ymap
.map
debe ser utilizado para las transformaciones de la lista, no en el contexto vacío para emular un ciclo forLa forma más fácil en mis experiencias es usar Dumpvalue .
Funciona a la perfección y no tiene que preocuparse por formatear el hash, ya que lo genera como lo hace el depurador Perl (ideal para la depuración). Además, Dumpvalue se incluye con el conjunto de stock de módulos Perl, por lo que no tiene que meterse con CPAN si está detrás de algún tipo de proxy draconiano (como si estuviera en el trabajo).
fuente
Si desea ser pedante y mantenerlo en una línea (sin declaraciones de uso y shebang), entonces me alejaré de la respuesta de tetromino y sugeriré:
No hacer nada especial aparte de usar el hash anónimo para omitir la variable temporal;)
fuente
Añado un espacio para cada elemento del hash para verlo bien:
fuente
Realmente me gusta ordenar las claves en un código de línea:
fuente