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

Difference in Perl regex variable $+{name} and $-{name}

当 Perl 正则表达式变量 $+{name}$-{name} 都用于引用来自 Perl statement/expression 代码的同一个正则表达式组时,它们有什么区别?

$+{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'
}

由于$+{name}只能保存一个标量值,所以它被赋值 到捕获组的第一个(最左边)元素。