use strict; use warnings; get_data(); get_data(); sub get_data { while ( ) { print $_; } } ##get_data __DATA__ A B C D #### while(1){ last unless my $immed = pop @{$immed_child{$root}}; get_descends($immed); $all_descends{$immed}++; } #### foreach my $immed ( @{$immed_child{$root}} ) { get_descends($immed); $all_descends{$immed}++; }