Perl 正则表达式变量 $+{name} 和 $-{name} 的区别

use*_*456 10 regex perl

$+{name}Perl 正则表达式变量之间以及$-{name}两者用于从 Perl 语句/表达式代码引用同一正则表达式组时有什么区别?

tsh*_*ono 11

虽然$+{name}保存被称为name 标量值的捕获子字符串,$-{name}但指保存具有名称的捕获组的数组。
这是一个小例子:

#!/usr/bin/perl

use strict;
use warnings;

'12' =~ /(?<foo>\d)(?<foo>\d)/; # '1' and '2' will be captured individually

print $+{'foo'}, "\n";          # prints '1'

for (@{$-{'foo'}}) {            # $-{'foo'} is a reference to an array
    print $_, "\n";             # prints '1' and '2'
}
Run Code Online (Sandbox Code Playgroud)

由于$+{name}只能保存单个标量值,因此它被分配给捕获组的第一个(最左边)元素。