Есть ли эквивалент в отладчике perl 'x' в pdl2 (или Devel :: REPL)? - PullRequest
10 голосов
/ 10 октября 2010

Я использую pdl2 (оболочка PDL) также в качестве интерактивной оболочки Perl по умолчанию (она загружает все красивые плагины для Devel::REPL).Но мне не хватает псевдонима печати дампера x.p хорошо для piddles, но не работает для обычного массива ref или hash ref.Я загрузил 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 нечто подобное и такое краткое?

[update] И связано с этим вопросом: есть ли pdl2 или Devel::REPL вспомогательные функции, такие как команды отладчика Perl m или y?Или нужно создать модуль с PadWalker и экспортировать их?Я хотел бы использовать настоящий REPL вместо отладчика Perl в качестве интерактивной оболочки, но все же в отладчике Perl есть некоторые важные вещи, которые я не знаю, как делать с Devel::REPL или 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 -подобно, чтобы сбросить требуемый?

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Похоже, что 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 нельзя заставить распознавать и анализировать такие команды.

0 голосов
/ 14 декабря 2010

Оболочка Devel :: REPL re.pl по умолчанию уже выводит значение последнего выражения:

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

$ 
...