Забудьте мой предыдущий пост, у меня есть идея получше.
sub match_positions {
my ($regex, $string) = @_;
return if not $string =~ /$regex/;
return ($-[0], $+[0]);
}
sub match_all_positions {
my ($regex, $string) = @_;
my @ret;
while ($string =~ /$regex/g) {
push @ret, [ $-[0], $+[0] ];
}
return @ret
}
Эта техника никак не меняет регулярное выражение.
Отредактировано, чтобы добавить: цитата из perlvar на $ 1 .. $ 9. "Все эти переменные доступны только для чтения и динамически ограничены текущим БЛОКОМ." Другими словами, если вы хотите использовать $ 1 .. $ 9, вы не можете использовать подпрограмму для сопоставления.