%{^CAPTURE_ALL}
%-

類似於 %+,這個變數允許存取目前動態範圍內最後一次成功匹配的命名擷取群組。(請參閱 "Regex 變數的範圍規則")。它將正規表示式中找到的每個擷取群組名稱,關聯到一個陣列的參考,其中包含該名稱的所有緩衝區擷取的值清單(如果有多個緩衝區),按照它們出現的順序。

以下是一個範例

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 混合作動迭代存取它們可能會產生無法預測的結果。同樣地,如果最後一次成功的匹配改變,則結果可能會令人驚訝。請參閱 "Regex 變數的範圍規則"

這個變數新增於 Perl v5.10.0。%{^CAPTURE_ALL} 別名新增於 5.25.7。

這個變數是唯讀的,而且它的值是動態範圍的。