Я нахожу print_r в PHP чрезвычайно полезным, но задаюсь вопросом, есть ли что-то отдаленно эквивалентное в Perl?
Примечание @tchrist рекомендует Data :: Dump over Data :: Dumper . Я не знал об этом, но, судя по всему, кажется, что он намного проще в использовании и дает лучший взгляд и легче интерпретировать результаты.
Данные :: Думпер :
Фрагмент примеров, показанных в приведенной выше ссылке.
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($@) if $@; 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);
Как обычно с Perl, вы можете предпочесть альтернативные решения почтенному Data :: Dumper:
И, конечно же, с помощью отладчика вы можете отобразить любую переменную с помощью команды «x». Мне особенно нравится форма ' x 2 $complex_structure
', где 2 (или любое число) сообщает отладчику отображать только 2 уровня вложенных данных.
Альтернативой Data :: Dumper , который не создает допустимый код Perl, но вместо этого более скиммерный формат (такой же, как команда x
отладчика Perl) является Dumpvalue . Он также потребляет намного меньше памяти.
Кроме того, есть Data :: Dump :: Streamer , который более точен в различных краевых и угловых случаях, чем Data :: Dumper .
Я использую Data :: Dump , это результат немного чище, чем Data :: Dumper (без $ VAR1), он обеспечивает быстрые ярлыки, а также пытается использовать DTRT, то есть он будет печатать на STDERR при вызове в контексте void и возвращать дамп строка, когда нет.
Я пошел искать то же самое и нашел эту прекрасную маленькую функцию Perl , явно предназначенную для создания таких результатов, как print_r ().
Автор сценария задавал ваш точный вопрос на форуме здесь .
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...