use strict;
use warnings;
use MTie::Hash;
use Data::Printer;
my $h = tie my %h, "Tie::StdHash";
@h{'a'..'d'}='A'..'D';
p %h;
print "\n";
p $h;
{
a "A",
b "B",
c "C",
d "D"
} (tied to Tie::StdHash)
Tie::StdHash {
public methods (9) : CLEAR, DELETE, EXISTS, FETCH, FIRSTKEY, NEXTKEY, SCALAR, STORE, TIEHASH
private methods (0)
internals: {
a "A",
b "B",
c "C",
d "D"
}
}
11 回答
这里如何打印而不使用Data::Dumper
循环:
实用
但纯粹的优雅,我必须选择争吵 . 对于我自己的代码,我会选择我的foreach . 或者tetro的Dumper使用 .
我为哈希的每个元素添加一个空格以便很好地看到它:
我真的很喜欢在一个班轮代码中对键进行排序:
简单:
优雅,但实际上慢了30%(!):
出于调试目的,我经常使用YAML .
结果是:
其他时候我会使用Data::Dump . 您不需要设置任意数量的变量来使其以比Data::Dumper更好的格式输出 .
最近我一直在使用Data::Printer进行调试 .
(结果可以在终端上更加丰富多彩)
与我在此处显示的其他示例不同,此示例仅用于显示目的 . 如果您转储绑定变量或对象的结构,则更容易显示 .
在我的经历中最简单的方法是使用Dumpvalue .
像魅力一样工作,你不必担心格式化哈希,因为它像Perl调试器那样输出它(非常适合调试) . 另外,Dumpvalue包含在Perl模块库存中,所以如果你背后某种严厉的代理(比如我在工作),你就不必乱用CPAN .
我的最爱:Smart::Comments
而已 .
答案取决于哈希中的内容 . 如果你有一个简单的哈希简单
要么
会这样做,但是如果你有一个用引用填充的哈希,那么你可以使用那些引用这些引用并产生合理输出的东西 . 这种引用的遍历通常称为序列化 . 有许多模块实现了不同的样式,一些比较流行的模块是:
Data::Dumper
Data::Dump::Streamer
YAML::XS
JSON::XS
XML::Dumper
由于
Data::Dumper
是核心Perl库的一部分,它可能是最受欢迎的;但是,其他一些模块可以提供非常好的东西 .Data::Dumper是你的朋友 .
将输出
如果你想变得迂腐并将它保持在一行(没有使用陈述和shebang),那么我将从tetromino的答案中剔除并建议:
除了使用匿名哈希跳过临时变量之外没有做任何特殊事情;)