Perl 5.10 имеет приятную функцию, которая облегчает эту проблему.\K
в части шаблона оператора подстановки говорит ему ничего не заменять до \K
.Таким образом, вы можете сделать шаблон, чтобы найти бит, который вы хотите изменить, но затем заменить только ту часть, которая не изменяется:
use v5.10;
use strict;
use warnings;
my $test = "_.4.1";
say $test;
my $docId=4;
$test =~ s/_\.$docId\.\K1/0/;
say $test;
Я удалил флаги /g
и /m
потому что они ничего не делают в вашем примере.
Если вы еще не используете v5.10 (и это одна из неподдерживаемых версий сейчас), вы можете получить тот же эффект с положительным взглядом назад (какпока это шаблон постоянной ширины):
use strict;
use warnings;
my $test = "_.4.1";
print "$test\n";
my $docId = 4;
$test =~ s/(?<=_\.$docId\.)1/0/;
print "$test\n";