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