2012-03-13 14 views
10

En Perl necesito analizar un enorme hash, así que lo imprimo en un archivo usando el módulo Data::Dumper. Debido a que es un archivo enorme, es muy difícil de leer. ¿Es posible de alguna manera imprimir bien la salida Dumper, así que cuando encuentre una cadena que estoy buscando, podré ver inmediatamente la estructura clave donde se almacena la cadena que estoy buscando?Perl hash Data :: Dumper

Actualmente estoy usando sólo un simple código:

  use Data::Dumper; 
      ... 
      print Dumper $var; 

¿Cuál es la mejor o la sintaxis alternativa para conseguir buen resultado?

+2

¿Por qué no dar un ejemplo de la salida que obtiene y la salida que desea? La salida del volquete está formateada por defecto para que pueda ver fácilmente la estructura de la llave, entonces, ¿qué más está buscando? – TLP

+2

-1 Hace la pregunta incorrecta. El vertedero es un gran objeto entrelazado. La pregunta debería ser cuáles son las llamadas API apropiadas para obtener los datos que desea, no cómo [pretificar un volcado] (http://p3rl.org/perltidy). – daxim

Respuesta

20

que casi siempre se establece

$Data::Dumper::Indent = 1; 
$Data::Dumper::Sortkeys = 1; 

con Data::Dumper. La primera declaración hace que la salida sea más compacta y mucho más legible cuando la estructura de datos tiene varios niveles de profundidad. La segunda declaración hace que sea más fácil para escanear la salida y encontrar rápidamente las teclas que más le interesen.

Si la estructura de datos contiene datos binarios o tabuladores incrustados/saltos de línea, también consideran

$Data::Dumper::Useqq = 1; 

cual es la salida una representación legible adecuada para esos datos.

Mucho más en el perldoc.

+0

Sí, ayuda un poco, gracias. –

+0

Lo siento, pero voy a preguntar qué podría ser una pregunta de novato sobre esta respuesta. Si el estricto pragma está en vigencia, ¿tiene que hacer algún tipo de declaración de $ Data antes de las declaraciones anteriores? –

+0

No, no es así. '$ Data :: Dumper :: Indent' y' $ foo :: bar' son nombres de variables "calificados" (especifican el paquete y el nombre de la variable) y están permitidos bajo 'strict'. – mob

-1

Responde la pregunta.

my $WWW_Scripter_Plugin_JavaScript_JE = ${ $VAR1->[1]{156192192} }; 
my $JE_Object_String = ${ $WWW_Scripter_Plugin_JavaScript_JE->{pf}{String} }; 
my $JE_Object_Function = ${ $JE_Object_String->{props}{search} }; 
my $REF = ${ $JE_Object_Function->{global} }; 
my $HTML_DOM_Element_Img = $REF->{classes}{'HTML::DOM::Element::Img'}; 

También viola la encapsulación. Perl te permite hacerlo, pero deberías preguntar cómo obtener los datos con la API WWW :: Scripter publicada.

+1

Solía ​​haber un comentario adjunto a la pregunta que apuntaba a la descarga de un gran volcado de un objeto WWW :: Scripter, ese comentario fue eliminado. Esta respuesta es una respuesta a ese comentario. – daxim

8

Una posible solución es usar Data::Dumper::Perltidy que ejecuta la salida de Data :: Dump through Perltidy.

#!/usr/bin/perl -w 

use strict; 
use Data::Dumper::Perltidy; 

my $data = [{ title => 'This is a test header' },{ data_range => 
      [ 0, 0, 3, 9] },{ format  => 'bold' }]; 

print Dumper $data; 

__END__ 

Lienzo:

$VAR1 = [ 
    { 'title'  => 'This is a test header' }, 
    { 'data_range' => [ 0, 0, 3, 9 ] }, 
    { 'format'  => 'bold' } 
]; 

Otra forma es utilizar Data::Dump.

0
$Data::Dumper::Sortkeys = 1; 

Si quiere obtener un resultado más confiable, entonces tiene que seguir el dumper siguiente. Ponga la palabra adecuada para operar esa función.

Cuestiones relacionadas