my @a = qw( 1 3 2 4); # NOT TESTED MUCH $i = 0; while ($i < @a ) { if ($a[$i] == 2) { my @in = mysub(whatever); splice @a, $i, 1, @in; $i += @in ; } else { $i++; } } print "@a\n"; sub mysub { # whatever return ( qw(9 2 9)); # always return an array, even if only 1 element }