2010-10-10 15 views
10

Estoy usando pdl2 (el shell PDL) también como un shell interactivo Perl predeterminado (carga todos los complementos agradables para Devel::REPL). Pero me falta el x alias de impresión de volcadas. p es bueno para los piddles, pero no funciona para una matriz normal ref o hash ref. He cargado Data::Dumper pero le falta una manera fácil de controlar la profundidad y me gusta la forma en que puede establecer rápidamente los límites de profundidad con x, p. x 2 $deep_datastruct para estructuras de datos complejas. Pero con Data::Dumper el proceso es más complicado:¿Hay un equivalente al depurador de perl 'x' en pdl2 (o Devel :: REPL)?

pdl> say $c 
HASH(0x53b0b60) 

pdl> p $c 
HASH(0x12b14018) 

pdl> use Data::Dumper 

pdl> p Dumper $c 
$VAR1 = { 
      'c' => { 
        'c' => 3, 
        'a' => 1, 
        'b' => { 
          'c' => '3', 
          'a' => '1', 
          'b' => '2' 
          } 
       }, 
      'a' => 1, 
      'b' => 4 
     }; 
pdl> $Data::Dumper::Maxdepth = 1; 
pdl> p Dumper $c 
$VAR1 = { 
      'c' => 'HASH(0x97fba70)', 
      'a' => 1, 
      'b' => 4 
     }; 

En el Perl debugger se puede lograr lo mismo con x 1 $c directamente. ¿Tiene pdl2 algo similar y tan conciso?

[Actualización] Y relacionado con esta pregunta: ¿Qué pdl2 o Devel::REPL tienen funciones de conveniencia como el depurador Perl comandos m o y? ¿O debería uno crear un módulo con PadWalker y exportarlos? Me gustaría utilizar un REPL real en lugar del depurador de Perl como un shell interactivo, pero el depurador de Perl aún tiene algunas cosas importantes que no sé cómo hacer con Devel::REPL o pdl2.

Por ejemplo, para ver todas las variables (pdl2 Mostrar únicamente piddles):

pdl> help vars 
PDL variables in package main:: 

Name   Type Dimension  Flow State   Mem 
---------------------------------------------------------------- 
no PDL objects in package main:: 

Por cierto, ¿Alguien sabe de un plugin Devel::REPL para la inclusión de todas las variables en uso (como y en el depurador, pero sólo los nombres, no los valores) y luego tienen un x -como para volcar el deseado?

Respuesta

4

Parece que Devel :: REPL proporciona una straightforward alternative a su primera pregunta. Crear un archivo llamado '.perldlrc' en su directorio principal que se parece a:

use Data::Dumper; 

sub x { 
    my $depth = shift; 
    $Data::Dumper::Maxdepth = $depth; 
    print Data::Dumper->Dump([@_]) 
} 

Por desgracia, necesita una coma como en:

pdl> x 1, $c 

Parece que se puede implementar el resto de comandos con este mismo enfoque de archivo de control. No veo una manera de eliminar la necesidad de la coma, aunque no creo que haya ninguna razón para que Devel :: REPL no pueda reconocer y analizar este tipo de comandos.

0

El Devel :: REPL cáscara re.pl ya se vuelca el valor de la última expresión por defecto:

[[email protected]]$ re.pl 
$ { a => 23, b => 34} 
$HASH1 = { 
      a => 23, 
      b => 34 
     }; 

$ 
+3

Ese es el problema, tengo esta opción desactivada porque si tiene un objeto compuesto mastodontico con uno de los subojects siendo el retorno de una base de datos con 10000 filas, no desea imprimir todo. Probablemente le gustaría imprimir solo el primer nivel del hash para ver qué subojects contiene (como db> x 2 $ mastobject). –

Cuestiones relacionadas