我正在使用Data::Dumper::Dumper()
方法。输出很好,但可以做得更紧凑,更漂亮。
我怎么能控制它?有哪些更好的选择?
看看Data::Dump是否有类似于 Data::Dumper 但可以说在漂亮打印方面更好。
编辑(20120304):我完全忘记了这个问题,但今天它被赞成了,这让我记忆犹新。如果我今天(3 年后)必须推荐任何在 Perl 中进行漂亮打印的东西,我肯定会选择Data::Printer。来自 Data::Printer's own 基本原理:
Data::Dumper 是一个很棒的工具,旨在以适合被
eval
重新输入的方式对数据结构进行字符串化。问题是,很多人继续使用它(以及类似的,如 Data::Dump)在屏幕上打印数据结构和对象以进行检查和调试,虽然您可以使用这些模块,但这并不意味着意思是你应该。
这就是 Data::Printer 的用武之地。它只做一件事: 在屏幕上显示 Perl 变量和对象,格式正确(供人检查)
如果要序列化输出以进行存储(而不是显示),请 查看Storable和. 每当我看到 Data::Dumper 被用来将数据结构保存在数据库或缓存中时,我都会感到畏缩。:(freeze()
thaw()
我通常使用 Data::Dump::Streamer,但正如其他人所说,只有当 Data::Dumper 的选项不够时。
Data::Dumper的一种替代*是JSON及其 Perl 实现JSON。
*是否更好由您决定。
如果您只是在寻找转储输出: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
它还执行了许多其他可爱的技巧,如果您阅读文档,您可以看到这些技巧。
一种选择是使用Data::Dumper::Perltidy,它(或多或少)是 Data::Dumper::Dumper() 的替代品,但它使用 Perltidy 来格式化输出。
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);
}