2010-10-10 22 views
10

J'utilise pdl2 (le shell PDL) également en tant que mon shell interactif Perl par défaut (il charge tous les bons plugins pour Devel::REPL). Mais il me manque l'alias x dumper-printing. p est sympa pour les pigles mais ça ne marche pas pour un ref de tableau normal ou un hash ref. J'ai chargé Data::Dumper mais il manque un moyen facile de contrôler la profondeur et j'aime la façon dont vous pouvez rapidement définir les limites de profondeur avec x, par exemple. x 2 $deep_datastruct pour les structures de données complexes. Mais avec Data::Dumper le processus est plus lourd:Existe-t-il un équivalent du débogueur Perl 'x' dans pdl2 (ou 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 
     }; 

Dans le Perl debugger vous pouvez obtenir la même chose avec x 1 $c directement. Est-ce que pdl2 a quelque chose de similaire et de si concis?

[mise à jour] Et avec cette question liée: ne pdl2 ou Devel::REPL ont des fonctions pratiques, comme les commandes débogueur Perl m ou y? Ou faut-il créer un module avec PadWalker et les exporter? Je voudrais utiliser un vrai REPL au lieu du débogueur Perl comme un shell interactif, mais le débogueur Perl a encore des choses importantes que je ne sais pas comment faire avec Devel::REPL ou pdl2.

Par exemple, pour voir toutes les variables (pdl2 Afficher uniquement les musarde):

pdl> help vars 
PDL variables in package main:: 

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

Par ailleurs, ce que quelqu'un sait un plugin Devel::REPL pour lister toutes les variables en cours d'utilisation (comme y dans le débogueur, mais seulement les noms, pas les valeurs) et ont ensuite un x-comme pour vider le voulu?

Répondre

4

Il ressemble Devel :: REPL fournit un straightforward alternative pour votre première question. Créez un fichier appelé « .perldlrc » dans votre répertoire qui ressemble à:

use Data::Dumper; 

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

Malheureusement, vous avez besoin d'une virgule comme dans:

pdl> x 1, $c 

Il semble que vous pouvez mettre en œuvre les autres commandes avec cette même approche de fichier de contrôle. Je ne vois pas un moyen de se débarrasser du besoin de la virgule, bien que je ne pense pas qu'il y ait une raison pour laquelle Devel :: REPL ne peut pas être fait pour reconnaître et analyser ces types de commandes.

0

Le Devel :: shell REPL re.pl décharges déjà la valeur de la dernière expression par défaut:

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

$ 
+3

C'est le problème, j'ai cette option désactivée car si vous avez un objet composite mastodontic avec l'un des sous-objets étant le retour d'une base de données avec 10000 lignes, vous ne voulez pas imprimer everyting. Probablement vous voudriez imprimer seulement le premier niveau du hachage pour voir quels sous-objets contiennent (comme db> x 2 $ mastobject). –