use strict; use warnings; my $str; #$str = "6%var% after"; $str = "%var% after"; # <-- warning is triggered $str =~ s/(\d?)%var%(.*)/$1REPLACED$2/; # <-- moved the '?' print "$str\n"