與 %+
類似,此變數允許存取目前動態範圍中最後一次成功配對的命名擷取群組。(請參閱 "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'
%-
hash 的鍵對應於正規表示式中找到的所有緩衝區名稱。
%-
的行為是透過 Tie::Hash::NamedCapture 模組實作的。
注意: %-
和 %+
是繫結到與最後一次成功正規表示式關聯的共用內部 hash 的檢視。因此,透過 each
混合反覆存取它們可能會產生無法預測的結果。同樣地,如果最後一次成功配對改變,則結果可能會令人驚訝。請參閱 "Regex 變數的範圍規則"。
此變數在 Perl v5.10.0 中新增。%{^CAPTURE_ALL}
別名在 5.25.7 中新增。
此變數是唯讀的,且其值是動態範圍的。