我注意到一种行为,我觉得很可疑。在perl 5.18和perl 5.22上进行了确认。
下面是一条简化的单行线,以进行说明。
$ echo -e "A B C D\n# E F G" | perl -wnE 'm{(.) (.) (.) (.)}; say($1,$2,$3,$4); say "HELLO $1 " . ($1 =~ s/\w/###/r) ." $2 $3 $4"'
ABCD
Use of uninitialized value $2 in concatenation (.) or string at -e line 1, <> line 1.
Use of uninitialized value $3 in concatenation (.) or string at -e line 1, <> line 1.
Use of uninitialized value $4 in concatenation (.) or string at -e line 1, <> line 1.
HELLO A ###
#EFG
HELLO # # E F G
显然,在任何捕获相关变量上调用非破坏性替换未定义,或者以某种方式阻止访问任何先前定义的捕获相关变量。使用命名捕获和
%+
搞砸
这对我来说似乎是个错误,但我不知道我是否错过了什么。
提前谢谢。