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

Pab*_*cia 10 perl pdl read-eval-print-loop

我正在使用pdl2(PDLshell)作为我的默认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
        };
Run Code Online (Sandbox Code Playgroud)

在Perl 调试器中,您可以x 1 $c直接实现相同的功能.是否pdl2有相类似,因此简洁的东西吗?

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

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

pdl> help vars
PDL variables in package main::

Name         Type   Dimension       Flow  State          Mem
----------------------------------------------------------------
no PDL objects in package main::
Run Code Online (Sandbox Code Playgroud)

顺便说一下,有人知道一个Devel::REPL插件列出了所有使用的变量(比如y在调试器中,但只有名称,而不是值),然后有一个类似x转储所需的变量?

Ian*_*ebo 4

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

use Data::Dumper;

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

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

pdl> x 1, $c
Run Code Online (Sandbox Code Playgroud)

看起来您可以使用相同的控制文件方法来实现其他命令。我没有找到一种方法来消除对逗号的需要,尽管我认为没有任何理由不能使 Devel::REPL 识别和解析这些类型的命令。