%{^CAPTURE_ALL}
%-

类似于 %+,此变量允许访问当前活动动态作用域中最后一次成功匹配的命名捕获组。 (参见 "正则表达式变量的作用域规则")。对于在正则表达式中找到的每个捕获组名称,它都会关联一个指向数组的引用,该数组包含所有具有该名称的缓冲区(如果有多个)捕获的值列表,按它们出现的顺序排列。

以下是一个示例

if ('1234' =~ /(?<A>1)(?<B>2)(?<A>3)(?<B>4)/) {
    foreach my $bufname (sort keys %-) {
        my $ary = $-{$bufname};
        foreach my $idx (0..$#$ary) {
            print "\$-{$bufname}[$idx] : ",
                  (defined($ary->[$idx])
                      ? "'$ary->[$idx]'"
                      : "undef"),
                  "\n";
        }
    }
}

将打印出

$-{A}[0] : '1'
$-{A}[1] : '3'
$-{B}[0] : '2'
$-{B}[1] : '4'

%- 哈希的键对应于在正则表达式中找到的所有缓冲区名称。

%- 的行为是通过 Tie::Hash::NamedCapture 模块实现的。

注意: %-%+ 是对与最后一次成功正则表达式关联的公共内部哈希的绑定视图。 因此,通过 each 对它们进行迭代访问可能会产生不可预测的结果。 同样,如果最后一次成功匹配发生变化,则结果可能会令人惊讶。 参见 "正则表达式变量的作用域规则"

此变量是在 Perl v5.10.0 中添加的。 %{^CAPTURE_ALL} 别名是在 5.25.7 中添加的。

此变量是只读的,其值是动态作用域的。