Perl 5.10 或更高的版本,?<LABEL>进行命名捕获。 而匹配之后,捕获的内容会保存在散列表%+中,以尖括号的名字作为散列表的键名:
use 5.010;$_ = 'Buster and Mini' ;if (/(?\S+)/ and (? \S+)/) } my ($first,$second) = ($+{first},$+{second}); ...}
这种技术同样适用于反向引用。 以前需要\1,\2等一一编号,现在只要用\k<label>语法引用命名捕获即可:
use 5.010;$_ = 'Buster and 'Buster' ;if (/(?\S+)/ and \k /) } say 'i found the same name twice!' ...}
perl 5.10 还引入了相对位置的反向引用,以绝对位置定位反向引用的写法是\g加数字编号:\g1
这种写法必须对每一组捕获的编号从头数起,如果我们需要反向引用的部分是末端,则倒过来数更方便。
\g{-1} 注意:负号两边的花括号。