Ты довольно близко. Вам не хватает флага e
для подстановки, которая оценивает замещающую строку как выражение. Кроме того, \A
в вашем взгляде не имеет смысла - вам, вероятно, нужен здесь литерал A
.
use strict;
use warnings;
my $str = "ABC10XYZ8 ( 50 100)
ABC11XYZ8 ( 150 200)
ABC12XYZ8 ( 150 300)";
$str =~ s/(?<=ABC)([0-9]+)/10+$1/ge;
$str =~ s/(?<=\( )([0-9]+)/100+$1/ge;
$str =~ s/([0-9]+)(?=\))/50+$1/ge;
print $str;
Вывод:
ABC20XYZ8 ( 150 150)
ABC21XYZ8 ( 250 250)
ABC22XYZ8 ( 250 350)
Конечно, если вы У вас есть много таких маленьких шаблонов, вы, вероятно, захотите создать массив пар и написать al oop, или создать какую-то абстракцию подпрограммы.