Я нахожу print_r в PHP чрезвычайно полезным, но задаюсь вопросом, есть ли что-то отдаленно эквивалентное в Perl?
Что такое Perl, эквивалентный PHP print_r()?
Ответ 1
Примечание @tchrist рекомендует Data:: Dump над Данные:: Самосвал. Я не знал об этом, но из-за его внешнего вида кажется, что он намного проще в использовании и дает лучший взгляд и легче интерпретировать результаты.
Отрывок из примеров, показанных в приведенной выше ссылке.
use Data::Dumper;
package Foo;
sub new {bless {'a' => 1, 'b' => sub { return "foo" }}, $_[0]};
package Fuz; # a weird REF-REF-SCALAR object
sub new {bless \($_ = \ 'fu\'z'), $_[0]};
package main;
$foo = Foo->new;
$fuz = Fuz->new;
$boo = [ 1, [], "abcd", \*foo,
{1 => 'a', 023 => 'b', 0x45 => 'c'},
\\"p\q\'r", $foo, $fuz];
########
# simple usage
########
$bar = eval(Dumper($boo));
print([email protected]) if [email protected];
print Dumper($boo), Dumper($bar); # pretty print (no array indices)
$Data::Dumper::Terse = 1; # don't output names where feasible
$Data::Dumper::Indent = 0; # turn off all pretty print
print Dumper($boo), "\n";
$Data::Dumper::Indent = 1; # mild pretty print
print Dumper($boo);
$Data::Dumper::Indent = 3; # pretty print with array indices
print Dumper($boo);
$Data::Dumper::Useqq = 1; # print strings in double quotes
print Dumper($boo);
Ответ 2
Как обычно с Perl, вы можете предпочесть альтернативные решения почтенному Data:: Dumper:
- Data:: Dump:: Streamer имеет выходной файл, отличный от Data:: Dumper, а также может сериализовать некоторые данные лучше, чем Data:: самосвал,
- YAML (или Yaml:: Syck или другой модуль YAML) генерируют данные в YAML, что вполне читаемо.
И, конечно же, с отладчиком вы можете отобразить любую переменную с помощью команды "x". Мне особенно нравится форма 'x 2 $complex_structure
', где 2 (или любое число) сообщает отладчику отображать только 2 уровня вложенных данных.
Ответ 3
Альтернатива Data:: Dumper, которая не создает допустимый код Perl, а вместо этого более скиммитируемый формат (такой же, как команда x
отладчика Perl) Dumpvalue. Он также потребляет намного меньше памяти.
Кроме того, существует Data::Dump::Streamer, что более точно в различных краевых и угловых случаях, чем Data:: Dumper есть.
Ответ 4
Я использую Data:: Dump, его вывод немного чище, чем Data:: Dumper (нет $VAR1), он обеспечивает быстрое ярлыки, и он также пытается выполнить DTRT, то есть он будет печатать на STDERR при вызове в контексте void и возвращать строку дампа, если нет.
Ответ 5
Я пошел искать то же самое и нашел эту прекрасную маленькую функцию Perl, явно предназначенную для генерации таких результатов, как print_r().
Автор script задал ваш точный вопрос на форуме здесь.
print objectToString($json_data);
Дает этот вывод:
HASH {
time => 1233173875
error => 0
node => HASH {
vid => 1011
moderate => 0
field_datestring => ARRAY {
HASH {
value => August 30, 1979
}
}
field_tagged_persons => ARRAY {
HASH {
nid => undef
}
}
...and so on...