$string =~ s/(\Q$first\E).*?(\Q$last\E)/$1$reserve$2/; #### $string =~ s/(?<=\Q$first\E).*?(?=\Q$last\E)/$reserve/; #### $first_start = index($_, $first); if ($first_start >= 0) { $first_end = $first_start + length($first); $last_start = index($_, $last, $first_end); if ($last_start >= 0) { substr($_, $first_end, $last_start, $replace); } }