2012-03-13 56 views
10

在Perl中,我需要分析一個巨大的散列,因此我使用Data::Dumper模塊將它打印到一個文件中。因爲它是一個巨大的文件,所以很難閱讀。是否有可能以某種方式打印Dumper輸出很好,所以當我找到一個我正在尋找的字符串時,我將能夠立即看到我正在尋找的字符串存儲的關鍵結構?Perl hash Data :: Dumper

目前我使用的只是一個簡單的代碼:

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

什麼是最好的語法或替代得到很好的輸出?

+2

爲什麼不舉例說明你得到的輸出和你想要的輸出?翻斗車輸出默認格式化,所以你可以很容易地看到關鍵結構,那麼你還在尋找什麼? – TLP 2012-03-13 16:41:16

+2

-1你問的是錯誤的問題。轉儲是一個巨大的交織對象。問題應該是合適的API調用是爲了獲得所需的數據,而不是如何[美化轉儲](http://p3rl.org/perltidy)。 – daxim 2012-03-13 17:35:51

回答

20

我幾乎總是設置

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

Data::Dumper。當你的數據結構深入幾層時,第一條語句使得輸出更加緊湊並且可讀性更高。第二條語句使得它更容易掃描輸出,並快速找到您最感興趣的鑰匙。

如果數據結構包含二進制數據或嵌入標籤/換行,還要考慮

$Data::Dumper::Useqq = 1; 

將輸出該數據的合適的可讀表示。

更多perldoc

+0

是的,它有一點幫助,謝謝。 – 2012-03-13 17:03:47

+0

對不起,但我會問什麼可能是一個關於這個答案的新手問題。如果嚴格的編譯指令生效,那麼在上述語句之前,您是否需要做一些$ Data的聲明? – 2015-11-24 14:58:05

+0

不,你不知道。 '$ Data :: Dumper :: Indent'和'$ foo :: bar'是「合格的」變量名(它們指定包和變量名),並且被允許在'strict'下。 – mob 2015-11-24 19:33:52

-1

這回答了這個問題。

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獲取數據。

+1

曾經有一個註釋附在指向WWW :: Scripter對象的巨大轉儲下載的問題上,該評論已被刪除。這個答案是對該評論的回覆。 – daxim 2012-03-16 10:41:34

8

一個可能的解決方案是使用Data::Dumper::Perltidy,它通過Perltidy運行Data :: Dump的輸出。

#!/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
$Data::Dumper::Sortkeys = 1; 

如果你想得到更可靠的結果,那麼你必須遵循下一次的傾銷。放入適當的詞來操作該功能。