Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Данные:: 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([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...