繁体   English   中英

Perl:为什么此表达式不适用于新版本的Perl?

[英]Perl: Why is this expression not working with the new version of Perl?

我正在尝试运行Perl脚本,该脚本会产生以下错误:

正则表达式中未转义的左大括号在正则表达式中是非法的; 在/root/cesm1_2_0/scripts/ccsm_utils/Case.template/ConfigCase.pm第1180行中以<-HERE标记在m /^(.)\\$ ENV {< -HERE (。 )}(。*)$ / 。在./create_newcase行361的要求中编译失败

令人反感的代码是:

if($text =~/^(.*)\$ENV{(.*)}(.*)$/){
    ...
}

代码中存在一个较早的问题,该问题是由于“使用了比该代码支持的版本更高的Perl版本”(请参阅​​: https : //bb.cgd.ucar.edu/machine-configuration-and-generating-domain-file ) ,因此我希望Perl中的regex语法已更改。

有人可以翻译此行以与当前版本的Perl兼容吗?

{现在始终被视为正则表达式元字符。 如果未转义的字符是非法的,则可以通过转义使其合法。

$text =~/^(.*)\$ENV\{(.*)}(.*)$/
                   ^---- new character

参见https://metacpan.org/pod/distribution/perl/pod/perl5260delta.pod#Unescaped-literal-"{"-characters-in-regular-expression-patterns-are-no-longer-permissible

尝试这个 :

if ($text =~/^(.*)\$ENV\{(.*)\}(.*)$/) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM