如果使用正则表达式匹配字符串.我可以替换另一条线吗?

Gar*_*ary 0 perl

如果我使用正则表达式匹配字符串,我可以更改不同行中的字符串吗?基本上,如果foo存在,我想bar改为soap.bar出现在文本文件的不同行上.foo如果存在,将始终出现在之前bar.

while (<FILE>) {
   if (m/foo/){
       s/bar/soap/;
   }
}
Run Code Online (Sandbox Code Playgroud)

数据文件:

foo
food
red
bar
blue
Run Code Online (Sandbox Code Playgroud)

Pau*_*l L 5

当您的if语句匹配时,值$_尚未更改.该行m//已对匹配的是,你正试图具有相同的线s///搜索和替换.相反,您需要设置一个标志,以后可以在新线被点击后检查:

open my $fh, '<', $filename or die "Cannot open $filename: $!\n";
my $flag = 0;
while (my $line = <$fh>) {
   $flag = 1 if $line =~ /foo/;
   $line =~ s/bar/soap/ if $flag;
}
Run Code Online (Sandbox Code Playgroud)