Что такое Perl, эквивалентный print_r () PHP?

Я нахожу 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:

  • Data :: Dump :: Streamer имеет выходной файл, отличный от Data :: Dumper, и может также сериализовать некоторые данные лучше, чем Data :: Dumper,
  • YAML (или Yaml :: Syck или другой модуль YAML) генерируют данные в YAML, что вполне читаемо.

И, конечно же, с помощью отладчика вы можете отобразить любую переменную с помощью команды «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...