Хеш-данные Perl:: Самосвал

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

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

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

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

Ответ 1

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

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

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

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

$Data::Dumper::Useqq = 1;

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

Значительно больше в perldoc.

Ответ 2

Одним из возможных решений является использование 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.

Ответ 3

$Data::Dumper::Sortkeys = 1;

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

Ответ 4

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

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 позволяет вам это делать, но лучше спросить, как получить данные с опубликованным API WWW:: Scripter.