В строке я хочу найти все совпадения регулярного выражения в строке, сохранить совпадения и заменить совпадения. Есть ли гладкий способ сделать это?
Пример:
my $re = qr{\wat};
my $text = "a cat a hat the bat some fat for a rat";
... (substitute $re -> 'xxx' saving matches in @matches)
# $text -> 'a xxx a xxx the xxx some xxx for a xxx'
# @matches -> qw(cat hat bat fat rat)
Я пробовал: @matches = ($text =~ s{($re)}{xxx}g)
но это дает мне счет.
Должен ли я добавить исполняемый код в конец шаблона $re
?
Обновление: вот метод, который использует расширенный шаблон выполнения кода (?{ ... })
:
use re 'eval'; # perl complained otherwise
my $re = qr{\wat};
my $text = "a cat a hat the bat some fat for a rat";
my @x;
$text =~ s{ ($re)(?{ push(@x, $1)}) }{xxx}gx;
say "text = $text";
say Dumper(\@x); use Data::Dumper;