Данные Perl-хэша :: Dumper - PullRequest
       26

Данные Perl-хэша :: Dumper

11 голосов
/ 13 марта 2012

В Perl мне нужно проанализировать огромный хеш, поэтому я печатаю его в файл, используя модуль Data::Dumper. Поскольку это огромный файл, его очень трудно прочитать. Можно ли как-нибудь красиво распечатать вывод Dumper, поэтому, когда я найду искомую строку, я сразу смогу увидеть структуру ключа, в которой хранится искомая строка?

В настоящее время я использую простой код:

            use Data::Dumper;
            ...
            print Dumper $var;

Каков наилучший синтаксис или альтернатива для получения хорошего вывода?

Ответы [ 4 ]

21 голосов
/ 13 марта 2012

Я почти всегда устанавливаю

$Data::Dumper::Indent = 1;
$Data::Dumper::Sortkeys = 1;

с Data::Dumper.Первое утверждение делает вывод более компактным и намного более читаемым, когда ваша структура данных имеет несколько уровней глубины.Второе утверждение облегчает сканирование выходных данных и быстрый поиск ключей, которые вам наиболее интересны.

Если структура данных содержит двоичные данные или встроенные табуляции / новые строки, также рассмотрите

$Data::Dumper::Useqq = 1;

который выведет подходящее читаемое представление для этих данных.

Гораздо больше в perldoc .

9 голосов
/ 14 марта 2012

Одним из возможных решений является использование Data :: Dumper :: Perltidy , которое пропускает вывод Data :: Dump через Perltidy.

#!/usr/bin/perl -w

use strict;
use Data::Dumper::Perltidy;

my $data = [{ title => 'This is a test header' },{ data_range =>
           [ 0, 0, 3, 9] },{ format     => 'bold' }];

print Dumper $data;

__END__

Печать:

$VAR1 = [
    { 'title'      => 'This is a test header' },
    { 'data_range' => [ 0, 0, 3, 9 ] },
    { 'format'     => 'bold' }
];

Другой способ - использовать Data :: Dump .

0 голосов
/ 01 июля 2013
$Data::Dumper::Sortkeys = 1;

Если вы хотите получить более надежный результат, то вам нужно следовать за самосвалом.Введите подходящее слово для работы этой функции.

0 голосов
/ 13 марта 2012

Это отвечает на вопрос.

my $WWW_Scripter_Plugin_JavaScript_JE = ${ $VAR1->[1]{156192192} };
my $JE_Object_String = ${ $WWW_Scripter_Plugin_JavaScript_JE->{pf}{String} };
my $JE_Object_Function = ${ $JE_Object_String->{props}{search} };
my $REF = ${ $JE_Object_Function->{global} };
my $HTML_DOM_Element_Img = $REF->{classes}{'HTML::DOM::Element::Img'};

Это также нарушает инкапсуляцию. Perl позволяет вам это делать, но вам лучше спросить, как получить данные с помощью опубликованного WWW :: Scripter API.

...