Есть ли эквивалент 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 сбросить требуемый?
Ответы
Ответ 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
};
$