2009-10-20 50 views
6

我正在使用Data::Dumper::Dumper()方法。输出是好的,但可以做得小巧,更好看。如何控制Data :: Dumper输出的格式?

我该如何控制它?什么是更好的选择?

+3

它到底是你不喜欢数据::翻车机的输出是什么? – innaM 2009-10-20 15:47:55

+3

回应Manni:您应该阅读文档并指出您需要的其他改进,而不是通过调整参数可以实现的改进。 – 2009-10-20 15:54:59

+1

我希望你不会把它用于制作,因为那将是我能看到你想让它变得更漂亮的唯一原因。它显示了数据结构。它不应该是漂亮的。 – 2009-10-20 22:22:49

回答

20

看看Data::Dump对于Data :: Dumper类似的东西,但可以说漂亮的打印更好。

编辑(20120304):我已经完全忘记了这个问题,但它今天被提高了,并且慢慢地记住了我的记忆。如果我今天(3年后)不得不推荐使用Perl进行漂亮打印,我肯定会Data::Printer一起去。从数据::打印机自身的理由:

的事情是

数据::自卸车是一个奇妙的工具,旨在字符串化数据结构在某种程度上,他们是适合于被eval“编回来,很多人继续使用它(和类似的Data :: Dump)来在屏幕上打印数据结构和对象以进行检查和调试,而您可以使用这些模块,但这并不意味着您应该是

这是数据::打印机进来它的目的是做一两件事,只有一两件事: 显示Perl的变量和对象在屏幕上,正确格式化(由人来检查)

3

一个替代方案*Data::Dumper将是JSON及其Perl执行JSON

*是否最好由您决定。

+3

跨平台或跨语言交流当然更好,例如准备通过JavaScript或Flash应用程序接收的数据结构。大多数现代语言都有JSON库,还有许多后现代和破旧的库。 :) – Ether 2009-10-20 16:23:04

5

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

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 %stash = %My::Package::; 
### %stash 

还做了一些其他的招数可爱,而如果你阅读的文档,你可以看到。

2

一个选项是使用Data::Dumper::Perltidy这是一个(或多或少)用于Data :: Dumper :: Dumper()的插入替换,但它使用Perltidy格式化输出。

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