use strict; my @arr = qw(a b c d c e f); insert_after_first(\@arr, "c", "x"); sub insert_after_first { my $arr = shift; my $before = shift; my @new = @_; @$arr = map { defined $before && $_ eq $before ? do { $before = undef; @new } : $_ } @$arr } use Data::Dumper; print Dumper(\@arr);