my @mission_list; add_children( \%root ); sub add_children { my ( $mission ) = @_; for my $i ( 0 .. $#mission_list ) { [...] if ( $#{$mission_list[$i]{reqs}} < 0 ) { delete $mission_list[$i]; @mission_list = grep { defined } @mission_list; print "$#mission_list\n\n"; } [...] } for my $i ( 0 .. $#{$$mission{children}} ) { add_children ( $$mission{children}[$i] ); } }