Подтвердить что ты не робот

Есть ли эквивалент perl-отладчика 'x' в pdl2 (или Devel:: REPL)?

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

[обновление] И связано с этим вопросом: есть ли pdl2 или Devel::REPL такие удобные функции, как команды отладчика Perl m или y? Или нужно создать модуль с PadWalker и экспортировать их? Я бы хотел использовать реальный REPL вместо отладчика Perl как интерактивную оболочку, но все же у отладчика Perl есть некоторые важные вещи, которые я не знаю, как делать с Devel::REPL или pdl2.

Например, чтобы увидеть все переменные (pdl2 показывать только подлодки):

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 сбросить требуемый?

4b9b3361

Ответ 1

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

Ответ 2

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

[[email protected]]$ re.pl
$ { a => 23, b => 34}
$HASH1 = {
           a => 23,
           b => 34
         };

$