Что такое Perl эквивалентно PHP print_r ()? - PullRequest
26 голосов
/ 23 октября 2008

Я считаю print_r в PHP чрезвычайно полезным, но интересно, есть ли что-нибудь удаленно эквивалентное в Perl?

Ответы [ 5 ]

43 голосов
/ 23 октября 2008

Примечание @tchrist рекомендует Данные :: Дамп более Данные :: Дампер . Я не знал об этом, но, судя по всему, он гораздо проще в использовании и дает лучший внешний вид и легче интерпретирует результаты.

Данные :: Самосвал :

Фрагмент примеров, показанных в приведенной выше ссылке.

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);
8 голосов
/ 23 октября 2008

Как обычно в Perl, вы можете предпочесть альтернативные решения почтенным Data :: Dumper:

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

И, конечно же, с помощью отладчика вы можете отобразить любую переменную с помощью команды 'x'. Мне особенно нравится форма 'x 2 $complex_structure', где 2 (или любое число) указывает отладчику отображать только 2 уровня вложенных данных.

6 голосов
/ 23 октября 2008

Альтернативой Data :: Dumper , которая не производит допустимый код Perl, но вместо этого более форматируемый формат (такой же, как команда x отладчика Perl), является Значение дампа, Он также потребляет намного меньше памяти.

Также существует Data :: Dump :: Streamer , который более точен в различных краевых и угловых случаях, чем Data :: Dumper is.

2 голосов
/ 28 января 2009

Я искал то же самое и обнаружил эту прекрасную маленькую 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...
2 голосов
/ 23 октября 2008

Я использую Data :: Dump , его вывод немного чище, чем Data :: Dumper's (без $ VAR1), он обеспечивает быстрые ярлыки и также пытается DTRT, то есть он печатает в STDERR когда вызывается в пустом контексте и возвращает строку дампа, когда нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...