目前在Ubuntu 16.04(xenial)上发布的Parse :: Yapp稍微落后于perl,因为它在正则表达式中使用未转义的' {'错误消息表明它在YappParse.yp中并不存在。为了在本地修补它,直到新版本的Parse :: Yapp下来管道,它是什么模板文件?
{YAPP}
正则表达式中未转义的左括号被弃用,在正则表达式中传递;标记为< - HERE in m / \ G {< - HERE / at YappParse.yp line 288。
正则表达式中未转义的左括号被弃用,在正则表达式中传递;标记为< - HERE in m / \ G%{< - HERE / at YappParse.yp line 315。
答案 0 :(得分:1)
Parse::Yapp自2001年以来一直没有发布。我不会屏住呼吸。由于它实际上没有维护,我建议您移动任何您正在使用它或接管维护。请考虑使用Pegex或Regexp::Grammars之类的内容。
幸运的是,这个问题已被报告过两次,都包含补丁。请参阅rt.cpan.org 114776和rt.cpan.org 10668。
Maintenance has been picked up and 1.20 appears to fix the problem
答案 1 :(得分:1)
perldb的堆栈跟踪显示(或暗示)该文件为Parse / Yapp / Parse.pm。这是一个补丁:
diff -u /usr/share/perl5/Parse/Yapp/Parse.pm{~,}
--- /usr/share/perl5/Parse/Yapp/Parse.pm~ 2001-05-20 07:19:57.000000000 -0400
+++ /usr/share/perl5/Parse/Yapp/Parse.pm 2016-09-18 02:12:09.116799976 -0400
@@ -880,7 +880,7 @@
return($1, [ $1, $lineno[0] ]);
};
- $$input=~/\G{/gc
+ $$input=~/\G\{/gc
and do {
my($level,$from,$code);
@@ -907,7 +907,7 @@
and return('START',[ undef, $lineno[0] ]);
$$input=~/\G%(expect)/gc
and return('EXPECT',[ undef, $lineno[0] ]);
- $$input=~/\G%{/gc
+ $$input=~/\G%\{/gc
and do {
my($code);
希望这会拯救他人一些侦探工作。
答案 2 :(得分:-1)
如果您从非ksh shell(例如ksh
)调用print
shell脚本(例如bash
),也会发生这种情况。