我想将散列的散列值(具有不确定的深度)以散列形式打印为CSV。如何在[perl]中将散列[hashes] *的散列值作为CSV打印
想象一下,我有一个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
这工作得很好Perl的v5.14及更高版本,其中'keys'愉快地接受hashref,而不是一个哈希值。你应该考虑升级。 – Borodin 2012-07-26 07:51:23