是否有与 pdl2(或 Devel::REPL)中的 perl 调试器 'x' 等效的东西? [英] Is there an equivalent to the perl debugger 'x' in pdl2 (or Devel::REPL)?
问题描述
我正在使用 pdl2
(PDL
shell) 也作为我默认的 Perl 交互式 shell(它为 Devel 加载所有漂亮的插件::REPL
).但我缺少 x
dumper-printing 别名.p
对 piddles 很好,但它不适用于普通的数组引用或哈希引用.我已经加载了 Data::Dumper
但它缺乏一种简单的方法控制深度,我喜欢你可以用 x
快速设置深度限制的方式,例如x 2 $deep_datastruct
用于复杂的数据结构.但是使用 Data::Dumper
的过程更加繁琐:
I am using pdl2
(the PDL
shell) also as a my default Perl interactive shell (it loads all the nice plugins for Devel::REPL
). But I am missing the x
dumper-printing alias. p
is nice for piddles but it does not work for a normal array ref or hash ref. I have loaded Data::Dumper
but it lacks an easy way of controlling depth and I like the way you can quickly set depth limits with x
, e.g. x 2 $deep_datastruct
for complex data structures. But with Data::Dumper
the process is more cumbersome:
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
有没有类似的这么简洁的东西?
In the Perl debugger you can achieve the same thing with x 1 $c
directly. Does pdl2
have something similar and so concise?
[更新]并与这个问题相关:pdl2
或 Devel::REPL
是否具有便利的功能,例如 Perl 调试器命令 m
或 y代码>?或者应该使用
.PadWalker
创建一个模块并导出它们?我想使用真正的 REPL 而不是 Perl 调试器作为交互式 shell,但是 Perl 调试器仍然有一些我不知道如何使用 Devel::REPL
或 <代码>pdl2
[update]
And related with this question: does pdl2
or Devel::REPL
have convenience functions like the Perl debugger commands m
or y
? Or should one create a module with PadWalker
and export them? I would like to use a real REPL instead of the Perl debugger as an interactive shell, but still the Perl debugger has some important things that I don't know how to do with Devel::REPL
or pdl2
.
例如查看所有变量(pdl2
只显示 piddles):
For example to see all variables (pdl2
only show 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
之类的来转储想要的?
By the way, does someone know a Devel::REPL
plugin for listing all the variables in use (like y
in the debugger, but only the names, not the values) and then have a x
-like to dump the wanted one?
推荐答案
看起来 Devel::REPL 提供了一个 直接替代,用于您的第一个问题.在您的主目录中创建一个名为.perldlrc"的文件,如下所示:
It looks like Devel::REPL provides an straightforward alternative for your first question. Create a file called '.perldlrc' in your home directory that looks like:
use Data::Dumper;
sub x {
my $depth = shift;
$Data::Dumper::Maxdepth = $depth;
print Data::Dumper->Dump([@_])
}
不幸的是,您需要一个逗号,如下所示:
Unfortunately, you need a comma as in:
pdl> x 1, $c
看起来您可以使用相同的控制文件方法实现其他命令.我没有看到摆脱逗号需求的方法,尽管我认为没有任何理由让 Devel::REPL 无法识别和解析这些类型的命令.
It looks like you can implement the other commands with this same control-file approach. I don't see a way to get rid the need for the comma, although I don't think there's any reason Devel::REPL cannot be made to recognize and parse these kinds of commands.
这篇关于是否有与 pdl2(或 Devel::REPL)中的 perl 调试器 'x' 等效的东西?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!