foreach my $element (@list) { # ... process element, search for sub-elements ... splice ( @list, ($depth_first_processing) ? 0 : @list, 0, $subelement ); }