2012-03-13 55 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; 

如果你想得到更可靠的结果,那么你必须遵循下一次的倾销。放入适当的词来操作该功能。