2012-03-13 15 views
10

W Perlu muszę przeanalizować ogromny skrót, więc wydrukuję go do pliku przy użyciu modułu Data::Dumper. Ponieważ jest to ogromny plik, jest bardzo trudny do odczytania. Czy jest możliwe, aby wydrukować dobrze wydruk Dumper, więc kiedy znajdę ciąg, którego szukam, będę mógł zobaczyć natychmiast strukturę klawiszy, w której szukany ciąg jest przechowywany?Hash danych Perla Data: Dumper

Obecnie używam tylko prosty kod:

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

Jaki jest najlepszy składnia lub alternatywę, aby uzyskać ładne wyjście?

+2

Dlaczego nie podać przykładu uzyskanego wyniku i żądanego wyniku? Wyjście wywrotki jest domyślnie sformatowane, dzięki czemu można łatwo zobaczyć strukturę klucza, więc czego jeszcze szukasz? – TLP

+2

-1 Zadajesz niewłaściwe pytanie. Zrzut jest ogromnym, splecionym obiektem. Należy zadać pytanie, jakie są odpowiednie wywołania API, aby uzyskać dane, które chcesz, a nie jak [udoskonalić zrzut] (http://p3rl.org/perltidy). – daxim

Odpowiedz

20

I prawie zawsze ustawiony

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

z Data::Dumper. Pierwsza instrukcja sprawia, że ​​wyjście jest bardziej kompaktowe i czytelniejsze, gdy struktura danych ma kilka poziomów głębokości. Druga instrukcja ułatwia skanowanie wyjście i szybko znaleźć kluczy, które najbardziej Cię interesują.

Jeśli struktura danych zawiera dane binarne lub wbudowane zaczepy/znaki nowej linii, również rozważyć

$Data::Dumper::Useqq = 1; 

który wyświetli odpowiednia czytelna reprezentacja dla tych danych.

Znacznie więcej w wersji perldoc.

+0

Tak, to pomaga, dzięki. –

+0

Przepraszam, ale zamierzam zapytać, co może być pytaniem dla początkujących o tej odpowiedzi. Jeśli rygorystyczna pragma jest w mocy, czy musisz wykonać jakąś deklarację $ Data przed powyższymi stwierdzeniami? –

+0

Nie, nie. '$ Data :: Dumper :: Wcięcie' i' $ foo :: bar' są "kwalifikowanymi" nazwami zmiennych (określają paczkę oraz nazwę zmiennej) i są dozwolone pod 'strict'. – mob

-1

To odpowiada na pytanie.

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'}; 

To również narusza hermetyzację. Perl pozwala ci to zrobić, ale powinieneś raczej zapytać, jak uzyskać dane za pomocą opublikowanego API WWW :: Scripter.

+1

W pytaniu wskazującym na pobranie ogromnego zrzutu obiektu WWW :: Scripter dodano komentarz, ten komentarz został usunięty. Ta odpowiedź jest odpowiedzią na ten komentarz. – daxim

8

Jednym z możliwych rozwiązań jest użycie Data::Dumper::Perltidy, który uruchamia wyjście danych :: Dump przez 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__ 

Wydruki:

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

Innym sposobem jest użycie Data::Dump.

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

Jeśli chcesz uzyskać bardziej wiarygodny wynik, musisz iść dalej. Wpisz odpowiednie słowo, aby obsługiwać tę funkcję.

Powiązane problemy