tet*_*ino 241
Data :: Dumper是你的朋友.
use Data::Dumper;
my %hash = ('abc' => 123, 'def' => [4,5,6]);
print Dumper(\%hash);
Run Code Online (Sandbox Code Playgroud)
将输出
$VAR1 = {
'def' => [
4,
5,
6
],
'abc' => 123
};
Run Code Online (Sandbox Code Playgroud)
Jon*_*ehl 60
简单:
print "$_ $h{$_}\n" for (keys %h);
Run Code Online (Sandbox Code Playgroud)
优雅,但实际上慢了30%(!):
while (my ($k,$v)=each %h){print "$k $v\n"}
Run Code Online (Sandbox Code Playgroud)
Bra*_*ert 23
出于调试目的,我经常使用YAML.
use strict;
use warnings;
use YAML;
my %variable = ('abc' => 123, 'def' => [4,5,6]);
print "# %variable\n", Dump \%variable;
Run Code Online (Sandbox Code Playgroud)
结果是:
# %variable
---
abc: 123
def:
- 4
- 5
- 6
Run Code Online (Sandbox Code Playgroud)
其他时候我会用Data::Dump.您不需要设置任意数量的变量来使其以比您更好的格式输出它Data::Dumper.
use Data::Dump = 'dump';
print dump(\%variable), "\n";
Run Code Online (Sandbox Code Playgroud)
{ abc => 123, def => [4, 5, 6] }
Run Code Online (Sandbox Code Playgroud)
最近我一直在Data::Printer用于调试.
use Data::Printer;
p %variable;
Run Code Online (Sandbox Code Playgroud)
{
abc 123,
def [
[0] 4,
[1] 5,
[2] 6
]
}
Run Code Online (Sandbox Code Playgroud)
(终端上的结果可以更加丰富多彩)
与我在此处显示的其他示例不同,此示例仅用于显示目的.如果您转储绑定变量或对象的结构,则更容易显示.
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;
Run Code Online (Sandbox Code Playgroud)
{
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"
}
}
Run Code Online (Sandbox Code Playgroud)
Cha*_*ens 11
答案取决于哈希中的内容.如果你有一个简单的哈希简单
print map { "$_ $h{$_}\n" } keys %h;
Run Code Online (Sandbox Code Playgroud)
要么
print "$_ $h{$_}\n" for keys %h;
Run Code Online (Sandbox Code Playgroud)
会这样做,但是如果你有一个用引用填充的哈希,那么你可以使用那些引用这些引用并产生合理输出的东西.这种引用的遍历通常称为序列化.有许多模块实现不同的样式,一些比较流行的模块是:
由于Data::Dumper它是Perl核心库的一部分,它可能是最受欢迎的; 但是,其他一些模块可以提供非常好的东西.
Axe*_*man 10
我最喜欢的:Smart ::评论
use Smart::Comments;
# ...
### %hash
Run Code Online (Sandbox Code Playgroud)
而已.
循环:
foreach(keys %my_hash) { print "$_ / $my_hash{$_}\n"; }
Run Code Online (Sandbox Code Playgroud)
功能性
map {print "$_ / $my_hash{$_}\n"; } keys %my_hash;
Run Code Online (Sandbox Code Playgroud)
但为了纯粹的优雅,我不得不选择 wrang-wrang's。对于我自己的代码,我会选择我的 foreach。或者 tetro 的 Dumper 使用。