perl中的几个替换

Enr*_*que 0 perl

如何用Perl进行两次替换?

我使用以下代码.我使用两次s替换...我希望所有的线条更少...

        (my $newName = $grib) =~ s/:00:00.grb//;
        rename $grib, $newName;

        (my $newName1 = $newName)  =~ s/d01/d02/g;
        rename $newName, $newName1;
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 7

按照要求:

(my $newName = $grib) =~ s/:00:00.grb//; rename $grib, $newName; (my $newName1 = $newName)  =~ s/d01/d02/g; rename $newName, $newName1;
Run Code Online (Sandbox Code Playgroud)

但那是愚蠢的.也没有理由把所有东西都塞进一行.相反,致力于生成高质量的可读代码.对于初学者来说,一旦做了就停止重命名两次!

my $newName = $grib;
$newName =~ s/:00:00.grb//;
$newName =~ s/d01/d02/g;
rename($grib, $newName)
   or die("Can't rename \"$grib\" to \"$newName\": $!\n");
Run Code Online (Sandbox Code Playgroud)

使用5.14+,可以将其简化为以下内容:

my $newName = $grib =~ s/:00:00.grb//r =~ s/d01/d02/gr;
rename($grib, $newName)
   or die("Can't rename \"$grib\" to \"$newName\": $!\n");
Run Code Online (Sandbox Code Playgroud)