Perl为什么正则表达式替换只在最后一行起作用



我有一个包含多行的文件,我试图在其中对最后一个数字进行计算。这是我的代码

open(FH,"<sample.txt") or die "Can't open that filen";
       while ($line=<FH>) {
        chomp $line;
        $line=~s/d+$/$&+5000/eg;
        print $line, "n";
    }

数据看起来很像这个

    Mark:1/12/68:1000
Ann:2/13/49:5000
Joe:7/25/73:300

在输出中,只有最后一行被修改,其余的保持不变。有人知道为什么吗?

您真正应该做的是将结构化数据视为结构化数据。

你有这样的数据:

Mark:1/12/68:1000
Ann:2/13/49:5000
Joe:7/25/73:300

并且你想在每行的第三个字段中添加5000,所以这样做:

while ( my $line = <$fh> ) {
    chomp $line;
    my @fields = split( /:/, $line );
    $fields[2] += 5000;
    say join( ':', @fields );
}

使用s///e来增加字段中的数值就像用螺丝刀搅拌油漆一样。你可以这样做,但这不是最明智的方法。

最新更新