【问题标题】:Perl hash Data::DumperPerl 哈希数据::Dumper
【发布时间】:2012-03-30 02:14:57
【问题描述】:

在 Perl 中,我需要分析一个巨大的散列,所以我使用 Data::Dumper 模块将它打印到一个文件中。因为它是一个巨大的文件,所以很难阅读。是否有可能以某种方式很好地打印Dumper 输出,所以当我找到我正在寻找的字符串时,我将能够立即看到存储我正在寻找的字符串的关键结构?

目前我只使用了一个简单的代码:

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

获得良好输出的最佳语法或替代方法是什么?

【问题讨论】:

  • 为什么不举一个你得到的输出的例子,以及你想要的输出? Dumper 输出默认格式化,因此您可以轻松查看关键结构,那么您还在寻找什么?
  • -1 你问错问题了。垃圾场是一个巨大的交织在一起的物体。问题应该是适当的 API 调用是什么来获取您想要的数据,而不是如何prettify a dump

标签: perl hash dump data-dumper


【解决方案1】:
$Data::Dumper::Sortkeys = 1;

如果您想获得更可靠的结果,那么接下来您必须跟随自卸车。输入合适的词来操作该功能。

【讨论】:

    【解决方案2】:

    一种可能的解决方案是使用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

    【讨论】:

      【解决方案3】:

      这回答了问题。

      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 获取数据。

      【讨论】:

      • 曾经有一条评论指向下载 WWW::Scripter 对象的大量转储的问题,该评论已被删除。此答案是对该评论的回复。
      【解决方案4】:

      我几乎总是设置

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

      Data::Dumper。当您的数据结构有多个级别时,第一个语句使输出更紧凑且更具可读性。第二条语句可以更轻松地扫描输出并快速找到您最感兴趣的键。

      如果数据结构包含二进制数据或嵌入的制表符/换行符,也要考虑

      $Data::Dumper::Useqq = 1;
      

      这将为该数据输出合适的可读表示。

      perldoc 中的更多内容。

      【讨论】:

      • 对不起,但我要问关于这个答案的新手问题。如果严格的 pragma 生效,您是否必须在上述语句之前进行某种形式的 $Data 声明?
      • 不,你没有。 $Data::Dumper::Indent$foo::bar 是“限定”变量名(它们指定了包以及变量名),并且在 strict 下允许使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多