my @arr = qw(abc aaa ccc bbb ddd); for (my $i=0; $i<=$#arr; $i++) { my @tmp = replace($arr[$i]); splice @arr, $i, 1, @tmp; $i += $#tmp; } print "@arr\n"; sub replace { local $_ = shift; return /^aaa$/ ? qw(rep1 rep2 aaa) : /^bbb$/ ? () : $_; }