是否有与pdl2(或Devel :: REPL)中的perl调试器'x'等效的?

时间:2010-10-10 01:04:39

标签: perl read-eval-print-loop pdl

我正在使用pdl2PDL shell)作为我的默认Perl交互式shell(它加载了Devel::REPL的所有漂亮的插件)。但我错过了x自卸车打印别名。 p对于piddles很好,但它不适用于普通的数组引用或散列引用。我已加载Data::Dumper,但它缺乏一种控制深度的简单方法,我喜欢使用x快速设置深度限制的方式,例如x 2 $deep_datastruct用于复杂的数据结构。但是对于Data::Dumper,这个过程更加繁琐:

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
        };

在Perl debugger中,您可以直接使用x 1 $c实现相同的功能。 pdl2是否有类似且简洁的内容?

[更新] 与此问题相关:pdl2Devel::REPL是否具有便利功能,例如Perl调试器命令my?或者应该创建一个PadWalker的模块并导出它们?我想使用真正的REPL而不是Perl调试器作为交互式shell,但Perl调试器还有一些我不知道如何处理Devel::REPLpdl2的重要事项。 / p>

例如,要查看所有变量(pdl2仅显示piddles):

pdl> help vars
PDL variables in package main::

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

顺便说一下,有人知道一个Devel::REPL插件列出了所有正在使用的变量(如调试器中的y,但只有名称而不是值)然后有一个{{ 1}} - 喜欢转储想要的那个?

2 个答案:

答案 0 :(得分:4)

看起来Devel :: REPL为您的第一个问题提供straightforward alternative。在主目录中创建一个名为“.perldlrc”的文件,如下所示:

use Data::Dumper;

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

不幸的是,你需要一个逗号,如下所示:

pdl> x 1, $c

看起来您可以使用相同的控制文件方法实现其他命令。我没有办法摆脱逗号的需要,虽然我认为Devel :: REPL无法识别和解析这些命令。

答案 1 :(得分:0)

Devel :: REPL shell re.pl在默认情况下已经转储了最后一个表达式的值:

[foo@host]$ re.pl
$ { a => 23, b => 34}
$HASH1 = {
           a => 23,
           b => 34
         };

$