Do you want to iterate over the whole thing, or do you have the keys for the node you want to access? If the latter then the code I posted in reply to your question can be used to access the node given the "key path". Otherwise you need to specify your problem a little more accurately.
The following code may help however:
my %data; @{$data{a}{b}{c}{columns}} = [1, 2, 3]; @{$data{a}{b}{c}{values}} = [4, 5, 6]; @{$data{d}{e}{columns}} = [7, 8, 9]; my %leaves; walkHash (\%data); print "columns: "; print "@$_ " for @{$leaves{columns}}; print "\nvalues: "; print "@$_ " for @{$leaves{values}}; sub walkHash { my $subHash = shift; for (keys %$subHash) { if (/columns/) { push @{$leaves{columns}}, @{$subHash->{$_}}; } elsif (/values/) { push @{$leaves{values}}, @{$subHash->{$_}}; } else { walkHash ($subHash->{$_}); } } }
Prints:
columns: 1 2 3 7 8 9 values: 4 5 6
In reply to Re: Accesing hash of unknown dimension
by GrandFather
in thread Accesing hash of unknown dimension
by Otogi
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |