是否有与 pdl2(或 Devel::REPL)中的 perl 调试器 'x' 等效的东西? [英] Is there an equivalent to the perl debugger 'x' in pdl2 (or Devel::REPL)?

查看:57
本文介绍了是否有与 pdl2(或 Devel::REPL)中的 perl 调试器 'x' 等效的东西?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 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?

[更新]并与这个问题相关:pdl2Devel::REPL 是否具有便利的功能,例如 Perl 调试器命令 my?或者应该使用 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆