如何控制Data :: Dumper输出的格式?

时间:2009-10-20 15:42:12

标签: perl dump data-dumper

我正在使用Data::Dumper::Dumper()方法。输出效果很好,但可以做得很小巧,看起来更好看。

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

7 个答案:

答案 0 :(得分:21)

看一下Data::Dump类似于Data :: Dumper的东西,但在漂亮的打印方面可以说更好。

编辑(20120304):我已经完全忘记了这个问题,但今天它被推翻了,这让我记忆犹新。如果今天(3年后)我不得不推荐任何在Perl中进行漂亮打印的东西,我会当然Data::Printer一起使用。来自Data :: Printer自己的理由:

  

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

     

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

     

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

答案 3 :(得分:3)

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

* 由您决定是否更好。

答案 4 :(得分:2)

如果你只是在寻找转储输出: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

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

答案 5 :(得分:2)

一个选项是使用Data::Dumper::Perltidy,它是(或多或少)替代Data :: Dumper :: Dumper()但使用Perltidy格式化输出。

答案 6 :(得分:2)

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