Я хочу напечатать хэш хэшей хэшей (с неопределенной глубиной) в формате CSV.
Представьте, что у меня есть структура foos, bar, 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.
keys
с радостью принимает хеш-ссылку вместо хеша. Вам следует подумать об обновлении. - person Borodin   schedule 26.07.2012