我正在使用Data::Dumper::Dumper()
方法。输出效果很好,但可以做得很小巧,看起来更好看。
我如何控制它?有哪些更好的选择?
答案 0 :(得分:21)
看一下Data::Dump类似于Data :: Dumper的东西,但在漂亮的打印方面可以说更好。
编辑(20120304):我已经完全忘记了这个问题,但今天它被推翻了,这让我记忆犹新。如果今天(3年后)我不得不推荐任何在Perl中进行漂亮打印的东西,我会当然与Data::Printer一起使用。来自Data :: Printer自己的理由:
Data :: Dumper是一个很棒的工具,用于以适合
eval
'的方式对数据结构进行字符串化。问题是,很多人一直在使用它(和类似的,比如Data :: Dump)在屏幕上打印数据结构和对象以进行检查和调试,而可以使用那些模块,并不意味着你应该。
这就是Data :: Printer的用武之地。它只是做一件事而且只做一件事: 在屏幕上显示Perl变量和对象,格式正确(由人类检查)
答案 1 :(得分:5)
如果要序列化输出以进行存储(而非显示),请查看Storable的freeze()
和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);
}