@LAST_MATCH_START
@-

此数组包含上次成功匹配的开头和它包含的任何捕获缓冲区的偏移量。(参见 "正则表达式变量的作用域规则")。

它包含的元素数量将比实际匹配某些内容的最高捕获缓冲区(也称为子组)的数量多一个。(与 @+ 相反,它可能包含更少的元素)。

$-[0] 是上次成功匹配的开头的偏移量。$-[n] 是由第 n 个子模式匹配的子字符串开头的偏移量,如果子模式没有匹配,则为未定义。

因此,在对 $_ 进行匹配后,$&substr $_, $-[0], $+[0] - $-[0] 相同。类似地,如果 $-[n] 被定义,则 $nsubstr $_, $-[n], $+[n] - $-[n] 相同,并且 $+substr $_, $-[$#-], $+[$#-] - $-[$#-] 相同。可以使用 $#- 来查找上次成功匹配中的最后一个匹配子组。与 $#+(正则表达式中的子组数量)形成对比。

$-[0] 是字符串中整个匹配开头的偏移量。此数组的第 n 个元素保存第 n 个子匹配的偏移量,因此 $-[1]$1 开始的偏移量,$-[2]$2 开始的偏移量,依此类推。

与某个变量 $var 匹配后

$` 等同于 substr($var, 0, $-[0])
$& 等同于 substr($var, $-[0], $+[0] - $-[0])
$' 等同于 substr($var, $+[0])
$1 等同于 substr($var, $-[1], $+[1] - $-[1])
$2 等同于 substr($var, $-[2], $+[2] - $-[2])
$3 等同于 substr($var, $-[3], $+[3] - $-[3])

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

此变量在 Perl v5.6.0 中添加。