#!/usr/bin/perl use warnings; use strict; sub get_arr { my $key = shift; my %h = ("[1]" => ["a", "b"], "[2]" => ["c", "[1]"], "[3]" => ["d", "e"], "[4]" => ["f", "[3]"], "[5]" => ["g", "h"], "[6]" => ["i", "[5]"], "[7]" => ["[2]", "[4]"], "[8]" => ["j", "[6]"], "[9]" => ["[7]", "[8]"]); my @arr = (); foreach my $i (@{$h{$key}}) { if (exists($h{$i})) { push(@arr, &get_arr($i)); } else { push(@arr, $i); } } return @arr; } for (my $i=1; $i<=9; $i++) { my $a = "[$i]"; print "$a\t"; my @res = &get_arr($a); foreach my $u (0 .. $#res) { print "$res[$u]"; if ($u < $#res){ print ", "; } } print "\n"; }