6

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

我怎么能控制它?有哪些更好的选择?

4

7 回答 7

21

看看Data::Dump是否有类似于 Data::Dumper 但可以说在漂亮打印方面更好。

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

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

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

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

于 2009-10-20T16:15:16.813 回答
5

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

于 2009-10-20T16:21:45.343 回答
4

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

于 2009-10-20T16:50:14.490 回答
3

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

*是否更好由您决定。

于 2009-10-20T15:56:39.317 回答
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 %stash = %My::Package::;
### %stash

它还执行了许多其他可爱的技巧,如果您阅读文档,您可以看到这些技巧。

于 2009-10-20T19:22:57.247 回答
2

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

于 2009-10-20T21:57:45.077 回答
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);
}
于 2011-05-20T15:18:25.197 回答