我似乎记得有访问在Perl正则表达式(即括号匹配的方式$1,$2,$3等)的数组,但现在我似乎无法找到.无论是@+和@-是我的意思.
编辑:
我应该添加我想在s///(替换)中访问此数组,如下所示:
s/(foo)(bar)+(baz)/mySubst(@!)/e;
Run Code Online (Sandbox Code Playgroud)
(如果@!我正在寻找阵列)
我不知道有一个内置的魔术数组,它包含所有带括号的组,但这并不能阻止你制作一个:
{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'
Run Code Online (Sandbox Code Playgroud)
这里我们声明Match::Parens将是@!带有tie 的数组的新实现.每次访问它时,它都会在该索引处查找当前匹配项.当前的实现从0开始,就像数组一样,您可能希望将其更改为从$1, $2, $3vars开始.