我正在尝试配置一个使用Perl脚本的生成。我在运行配置脚本(Perl版本v5.26.1)时遇到此错误
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/^(.*)\$ENV{ <-- HERE (.*)}(.*)$/
有问题的代码是
if($text =~/^(.*)\$ENV{(.*)}(.*)$/){
$text = $1.$ENV{$2}.$3;
}
我对Perl很陌生,有人能帮忙吗?TY
3条答案
按热度按时间ux6nzvsh1#
Perl 5.26引入了一项更改,要求对文本大括号进行转义。下面是讨论该更改的Perl更改日志:https://perldoc.perl.org/5.26.0/perldelta.html
据推测,该脚本是针对Perl的早期版本编写的...
如果Perl脚本仍然在某个地方维护,我建议要么提交一个bug,要么(更好)发布一个PR来修复这个问题。
如果没有,您可以回退到Perl的早期版本,或者修复您的本地副本。
编辑修复示例:
yptwkmov2#
要回答您的特定问题,您需要使用与示例中
$
转义相同的方式对大括号进行转义-使用反斜杠,如下所示:也可以在括号内作为字符类使用:
qvtsj1bj3#
对于5.33(或5.34)之前的perl版本,出现此错误的一个可能原因是使用了
{,n}
组合符。早期的perl版本要求它是{0,n}
。