What I was really trying to do is a recursive function. my $fv = fact ('16000'); my $level = 0; my $ord = 0; sub fact { my $val = $_[0]; my $ch = $hash{$val}; my @chs = split(',',$ch); print ' 'x$level x 3,$val," ",$_[0]," ",$level," ",$ord++,"\n"; if ($ch) { $level++; foreach my $ch1(@chs){ fact($ch1); delete $hash{$ch1}; } $level--; } }