use strict; use warnings; my @cons = ( ["1A", "2A"], ["1A", "2B"], ["2A", "4A"], ["3A", "2A"], ["4A", "5A"], ["2B", "3A"], ["3A", "4A"] ); print "Gib das Element ein, ab welchen der Baum zurueck gegeben werde soll?\n"; my $input_id = ; chomp($input_id); print "--------------------------------\n"; print "--- \n"; print "--- \n"; print "--- Mein input_id war:\n"; print "--- \n"; print "--- $input_id \n"; print "--- \n"; print "--- \n"; print "--------------------------------\n "; print "IST ---------------\n"; for (my $i = 0; $i <= $#cons; $i++){ my $id = $cons[$i][0]; my $rootid = $cons[$i][1]; print "$id --> $rootid\n"; } print "\n" x 3; my @tree_duplicates = (); &abwaerts($input_id); my %seen; my @tree = grep { ! $seen{join(q{,}, @$_)}++ } @tree_duplicates; for (my $i = 0; $i <= $#tree; $i++){ my $i_id = $tree[$i][0]; my $i_rootid = $tree[$i][1]; print "$i_id, $i_rootid\n"; } sub abwaerts{ my $id = shift; # print "--> Meine EinstiegsID: $id\n"; for (my $i = 0; $i <= $#cons; $i++){ my $i_id = $cons[$i][0]; my $i_rootid = $cons[$i][1]; # print "ooo $i_id, $i_rootid\n"; if ($id eq $i_id){ # print "--> in Array iterierend: $i_id\n"; &abwaerts($i_rootid); print "-->CON $id --> $i_rootid\n"; push @tree_duplicates, [$id, $i_rootid]; } } }