use warnings; use strict; my $udStr = "abcabcabc"; my $udSearch = '(a)'; my $udRep = '---$1---'; print "before: $udStr\n"; my $before = $udStr; $udStr =~ s/$udSearch/$udRep/; my @starts = @-; my @ends = @+; for (1..$#starts) { my $replace = substr $before, $starts[$_], $ends[$_] - $starts[$_]; $udStr =~ s/\$$_(?=\D)/$replace/; } print "after: $udStr\n"; #### before: abcabcabc after: ---a---bcabcabc