Perl为什么正则表达式替换仅适用于最后一行?

时间:2015-03-26 20:17:50

标签: regex perl

我有一个多线的文件,我尝试对最后一个数字进行计算。这是我的代码

open(FH,"<sample.txt") or die "Can't open that file\n";
       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

在输出中,仅修改最后一行,其余行保持不变。有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

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

你有这样的数据:

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

并且您希望在每行的第3个字段中添加5000,所以请执行以下操作:

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

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