我想以哈希值打印散列哈希值(深度不确定)。
想象一下,我有一个foos,bars,cars ......的结构,其中最深的哈希的键指向数字标量。
我想打印这个结构看起来像这样:
foo1;bar1;car1;345
foo1;bar1;car2;25347
foo1;bar2;car1;23
foo2;bar1;car1;863
......
......
当你不知道哈希结构的深度时(或者还有其他的火星和战争等等),有人知道怎么做吗?
到目前为止我尝试了什么?
sub print_csv {
my $subj = shift;
if ( ref($subj) eq "HASH" ) {
for ( keys $subj ) {
print "$_;";
print_csv( $subj->{$_} );
}
}
else {
print "$subj\n";
}
}
这是我的一般想法,但在第一个之后不会重复哈希的键。
提前致谢!!!
修改
我已经在使用perl 5.14了。我的问题是,哈希的键在它们第一次出现后不再重复。我目前的输出如下:
foo1;bar1;4
foo2;bar2;12060
bar3;24
bar1;152
foo3;bar3;1
bar1;815
foo2有3个条形(bar1,bar2,bar3),但它的名字“foo2”在第3行和第4行中不重复。它与foo3相同。它有两个条形(bar1和bar3)但它的名字“foo3”在第6行中缺失。
答案 0 :(得分:3)
现在知道了,我想这就是你想要的:
sub print_csv {
my $subj = shift;
my $prefix = shift || "";
if ( ref($subj) eq "HASH" ) {
for ( keys %$subj ) {
print_csv( $subj->{$_}, $prefix ."$_;");
}
}
else {
print "$prefix$subj\n";
}
}
数据:
my %hash = ();
my %hash2 = ();
my %hash3 = ();
$hash3{"test3Key"}="test5";
$hash2{"test2Key"}=\%hash3;
$hash2{"test2Key2"}="test2Key2Value";
$hash{"testSimpleKey"} = "test2";
$hash{"testHashRefKey"}=\%hash2;
结果:
testSimpleKey;test2
testHashRefKey;test2Key;test3Key;test5
testHashRefKey;test2Key2;test2Key2Value