10

我还使用pdl2PDLshell)作为我的默认 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调试器中,您可以直接实现相同的目的x 1 $c。有没有pdl2类似的东西这么简洁?

[更新] 并与这个问题相关:是否pdl2Devel::REPL具有 Perl 调试器命令my?或者应该创建一个模块PadWalker并导出它们?我想使用真正的 REPL 而不是 Perl 调试器作为交互式 shell,但是 Perl 调试器仍然有一些我不知道如何处理的重要事情Devel::REPLor pdl2

例如查看所有变量(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在调试器中,但只有名称,而不是值)然后有一个x-like 来转储想要的变量?

4

2 回答 2

4

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

use Data::Dumper;

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

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

pdl> x 1, $c

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

于 2011-02-16T05:57:42.800 回答
0

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

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

$ 
于 2010-12-14T15:23:00.787 回答