use strict; open (T, "<", "file.txt")|| die "$!"; open (OUT, ">", "out.txt") || die "$!"; my $t = $ARGV[0];# $t could be 3 not 1 so that i can start from that point my %hash; while (){ m/^(\d+?),(\d+?)\n/g; my ($child, $parent) = ($2,$1); push @{$hash{$child}},$parent; } walk($t); sub walk { my $numb = shift; print OUT "\|->$numb\n"; #my @walk = $numb; for (@{$hash{$numb}}){ #push @walk, #print OUTNOD "\|->>>"; walk($_); print OUTNOD "\|->>"; } #return @walk; }