Мне не известно о встроенном магическом массиве, который содержит все группы в скобках, но это не мешает вам создать одну из них:
{package Match::Parens;
sub TIEARRAY {bless []}
sub FETCH {no strict 'refs'; ${$_[1] + 1}}
sub FETCHSIZE {$#+}
tie @!, __PACKAGE__;
}
sub mySubst {join ', ' => map ucfirst, @_}
my $str = 'foobarbarbaz';
$str =~ s/(foo)(bar)+(baz)/mySubst(@!)/e;
say $str; # prints 'Foo, Bar, Baz'
Здесь мы заявляем, что Match::Parens
будетбыть новой реализацией массива @!
со связью.Каждый раз, когда к нему обращаются, он ищет текущее совпадение по этому индексу.Текущая реализация начинается с 0, как массивы, вы можете изменить его на 1, как $1, $2, $3
vars.