sub insert_after_first { my ($element, $insert, @array) = @_; my @ret = (); while (push(@ret, shift @array) && $ret[-1] ne $element && @array) {}; # (@ret, $insert, @array); (@ret, scalar @array ? $insert : (), @array); } print join(' ', insert_after_first('c', 'x', qw ( a b c d c e f ))), "\n"; print join(' ', insert_after_first('q', 'x', qw ( a b c d c e f ))), "\n";