我正在使用pdl2
(PDL
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
是否有类似且简洁的内容?
[更新]
与此问题相关:pdl2
或Devel::REPL
是否具有便利功能,例如Perl调试器命令m
或y
?或者应该创建一个PadWalker
的模块并导出它们?我想使用真正的REPL而不是Perl调试器作为交互式shell,但Perl调试器还有一些我不知道如何处理Devel::REPL
或pdl2
的重要事项。 / 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}} - 喜欢转储想要的那个?
答案 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
};
$