Работа оператор s/// с модификатором g и без него
Оператор замены s/// без модификатора g ищет в заданной переменной прототип регулярного выражения и в случае нахождения заменяет его на выражение для замены, после чего заканчивает свою работу. При наличии модификатора g замена производится столько раз, сколько раз был найден фрагмент текста, соответствующий регулярному выражению. В результате все найденные фрагменты будут заменены на заданное выражение. В результате возвращается число произведенных замен или пустая строка (или соответствующий список в случае спискового контекста). Например:
my $text='123 234 345 456'; $text =~ s/\d+/a/; print $text;
Получим строку
a 234 345 456
Еще пример:
my $text='123 234 345 456'; $text =~ s/\d+/reverse $&/ge; print $text;
Здесь получим такой результат:
321 432 543 654
В последнем операторе поиска и замены мы использовали режим замены с модификатором e (с выполнением кода Perl). В результате каждое найденное число заменилось на это же число, записанное в обратном порядке. Также мы могли бы написать:
$text =~ s/(\d+)/reverse $1/ge;
В операторах m// и s/// специальные переменные $1, $2, …, $&, $`, $' и т.д. для каждой итерации, обусловленной модификатором g, создаются заново (локализуются). В результате при замене используются нужные значение этих переменных, которые возникли при последней итерации поиска.