问题描述
我正在尝试配置一个使用生成的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
解决方法
Perl 5.26进行了一项更改,要求转义大括号。这是讨论它的Perl更新日志:https://perldoc.perl.org/5.26.0/perldelta.html
大概该脚本是针对Perl的早期版本编写的...
如果Perl脚本仍保留在某个地方,我建议您提交错误或(更好)发布PR来解决此问题。
否则,您可以使用Perl的较早版本,也可以修复本地副本。
编辑 修复示例:
if($text =~/^(.*)\$ENV\{(.*)\}(.*)$/){
$text = $1.$ENV{$2}.$3;
}
,
要回答您的特定问题,您需要以与示例中的$
相同的方式转义花括号-带有反斜杠,如下所示:
if ($string =~ /\{\}/) { ... }
或者它们可以在方括号内用作字符类:
if ($string =~ /[{}]/) { ... }