我如何修复"正则表达式中未转义的左括号被弃用" Parse :: Yapp中的错误?

时间:2016-09-18 06:08:28

标签: perl

目前在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。

3 个答案:

答案 0 :(得分:1)

Parse::Yapp自2001年以来一直没有发布。我不会屏住呼吸。由于它实际上没有维护,我建议您移动任何您正在使用它或接管维护。请考虑使用PegexRegexp::Grammars之类的内容。

幸运的是,这个问题已被报告过两次,都包含补丁。请参阅rt.cpan.org 114776rt.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),也会发生这种情况。