簡體   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