我正在尝试运行一个定义一些(复杂)正则表达式的脚本:https://github.com/wo/opp-tools/blob/master/rules/Keywords.pm。每当我包含这个模块时,Perl会崩溃并显示消息“panic:reg_node overrun尝试在规则/ Keywords.pm第60行发出51”。这是在Ubuntu 12.04上的Perl v5.14.2。任何可能导致这种情况的想法都将受到赞赏。
更新:这是导致问题的代码段。
use strict;
use warnings;
use utf8;
my $re_address_word = qr/\b(?:
universit|center|centre|institute?|sciences?|college|research|
avenue|street|philosophy|professor|address|department|
umass
)\b/ix;
our $re_publication_word = qr/\b(?:
forthcoming|editors?|edited|publish\w*|press|volume
to\sappear\sin|draft|editor\w*|reprints?|excerpt|
circulation|cite
)\b/ix;
my $re_notitle = qr/
$re_address_word |
$re_publication_word |
\b(?:thanks?|
@|
[12]\d{3}|
abstract
)/ix;
our $re_title = qr/^
(?!.*$re_notitle?.*)
\p{IsAlpha}
/x;
答案 0 :(得分:0)
我在编译包含多个表达式的正则表达式时遇到了同样的问题。下面的示例说明了生成问题的代码:
my $cities = qr/(Foo1|Foo2|FooBarss)/;
## Solution change ss -> s[s]
## my $cities = qr/(Foo1|Foo2|FooBars[s])/;
my $street = qr/(foo|bar|baz)/;
$text =~ /$street \s+ $cities/;
解决方案是用s [s]替换文字ss,它似乎很随机,我不能挖掘引用来支持它,但它对我有用。