【问题标题】:How can I control the formatting of Data::Dumper's output?如何控制 Data::Dumper 输出的格式?
【发布时间】:2010-12-08 09:49:09
【问题描述】:

我正在使用Data::Dumper::Dumper() 方法。输出不错,但可以做得更紧凑,更好看。

我该如何控制它?有哪些更好的选择?

【问题讨论】:

  • Data::Dumper 的输出到底是什么让您不满意?
  • Data::Dumper 有很多选项。见the documentation。您可以修复缩进、填充、变量名、深度、键排序等。
  • Echoing Manni:您应该阅读文档并指出除了通过调整参数可以实现的改进之外,您还需要哪些改进。
  • 我希望你不要将它用于生产,因为这是我能看出你想让它更漂亮的唯一原因。它显示了数据结构。它不应该是漂亮的。
  • @Elizabeth:在“为了美观而打扮”的意义上,它不应该更漂亮,但漂亮的印刷也与清晰度有关。在处理复杂数据时,更清晰的输出会非常有用。这是Data::Dumper 和公司进行漂亮打印并提供各种格式选项的很大一部分原因。

标签: perl dump data-dumper


【解决方案1】:

Data::Dumper 的一个替代*JSON 及其Perl 实现JSON

*是否更好由您决定。

【讨论】:

  • 对于跨平台或跨语言的通信当然更好,比如准备一个数据结构要被javascript或Flash应用程序接收。大多数现代语言都有 JSON 库,还有许多后现代和陈旧的语言。 :)
【解决方案2】:

查看Data::Dump 的内容类似于 Data::Dumper 但可以说更擅长漂亮的打印。

编辑 (20120304):我完全忘记了这个问题,但今天它被点赞了,这让我记忆犹新。如果我今天(3 年后)必须推荐任何在 Perl 中进行漂亮打印的东西,我当然会选择 Data::Printer。来自 Data::Printer 自己的理由:

Data::Dumper 是一个很棒的工具,旨在以适合eval'ed 的方式对数据结构进行字符串化。

问题是,很多人一直在使用它(以及类似的,如 Data::Dump)在屏幕上打印数据结构和对象以进行检查和调试,而您可以使用那些模块,并不意味着你应该

这就是 Data::Printer 的用武之地。它意味着做一件事,而且只做一件事: 在屏幕上显示 Perl 变量和对象,格式正确(供人检查)

【讨论】:

    【解决方案3】:

    如果您想序列化输出以进行存储(而不是显示),请查看Storablefreeze()thaw()。每当我看到 Data::Dumper 被用来将数据结构保存在数据库或缓存中时,我都会感到畏缩。 :(

    【讨论】:

      【解决方案4】:

      我通常使用 Data::Dump::Streamer,但正如其他人所说,只有当 Data::Dumper 的选项不够时。

      【讨论】:

        【解决方案5】:

        如果您只是在寻找转储输出:Smart::Comments

        你只需use它。

        use Smart::Commments;
        

        然后你将任何简单的变量放在一个三哈希注释中,如下所示:

        my $v = black_box_process();
        ### $v
        

        它以几乎最漂亮的印刷品将其倾倒出来。

        您还可以像这样管理更复杂的表达式:

        ### ( $a && ( $b ^ ( $c || $d ))) : ( $a && ( $b ^ ( $c || $d )))
        

        但是你必须注意它的“冒号路径”。

        ### $My::Package::variable
        

        ### %My::Package::

        根据我的经验,从未工作过。如果我想让他们工作,那么我需要这样的东西:

        my %stash = %My::Package::;
        ### %stash
        

        它还有许多其他可爱的技巧,如果你阅读文档就可以看到。

        【讨论】:

          【解决方案6】:

          一种选择是使用Data::Dumper::Perltidy,它(或多或少)是 Data::Dumper::Dumper() 的替代品,但它使用 Perltidy 来格式化输出。

          【讨论】:

            【解决方案7】:

            Data::Dumper::Concise 是另一种可能性。

            use Data::Dumper::Concise;
            warn Dumper($var);
            

            相当于:

            use Data::Dumper;
            {
              local $Data::Dumper::Terse = 1;
              local $Data::Dumper::Indent = 1;
              local $Data::Dumper::Useqq = 1;
              local $Data::Dumper::Deparse = 1;
              local $Data::Dumper::Quotekeys = 0;
              local $Data::Dumper::Sortkeys = 1;
              warn Dumper($var);
            }
            

            【讨论】:

              猜你喜欢
              • 2010-09-29
              • 1970-01-01
              • 1970-01-01
              • 2011-06-26
              • 1970-01-01
              • 2010-10-28
              • 1970-01-01
              • 2012-09-03
              • 2017-02-09
              相关资源
              最近更新 更多