#untested, but should work my $str = 'abcd'; my $pattern = shift; if ($str =~ $pattern) { my $repl = shift; say '$repl: ', $repl; say 'old $str: ', $str; $str =~ s/(?=$pattern)/$repl/; say 'new $str: ', $str; } __END__ $ perl 2perl.pl 'ab' '--' $repl: -- old $str: abcd new $str: --abcd #### @_=qw; Just another Perl hacker,; ;$_=q=print "@_"= and eval;