Recursion will help you there. (Doing it iteratively instead is also possible, of course, but less natural and elegant.) Here's one solution:
#!/usr/bin/perl use strict; use warnings; my %hash = ( "Usb1" => "Usb2,Usb3", "Usb2" => "val1,val2,Usb4", "Usb3" => "val3", "Usb4" => "val4" ); say_values(\%hash, "Usb1"); say_values(\%hash, "Usb2"); sub say_values { print_values(@_); print "\n"; } sub print_values { my ($hash_ref, $key) = @_; return unless exists $hash_ref->{$key}; my @values = split ",", $hash_ref->{$key}; foreach my $index (0..$#values) { print $values[$index]; if(exists $hash_ref->{$values[$index]}) { print "["; print_values($hash_ref, $values[$index]); print "]"; } print "," unless $index == $#values; } }
This produces:
$ perl 1098967.pl Usb2[val1,val2,Usb4[val4]],Usb3[val3] val1,val2,Usb4[val4] $
In reply to Re: Parsing through Hashes
by AppleFritter
in thread Parsing through Hashes
by sidsinha
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |