my $str = "One:Two:Three:four, One:Two:3:4, One:2:3:4, One:2:three"; #### $keywords = { One => { Two => { Three => four, 3 => 4 }, 2 => { 3 => 4, three => "" } } }; #### my $n = 0; sub print_keywords { my $k = shift; for my $key (keys %$k) { print " " x $n; print "$key\n"; $n++; if (keys %{$k->{$key}}) { print_keywords($k->{$key}); } elsif ($k->{$key}) { print " " x $n, $k->{$key}, "\n"; } $n--; } }