Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Perl为什么正则表达式替换只在最后一行起作用?_Regex_Perl - Fatal编程技术网

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

Regex Perl为什么正则表达式替换只在最后一行起作用?,regex,perl,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"; } 在输出中,仅修改最后一行,其余行保持不变。有人知道为什么吗

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

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
您希望在每行的第三个字段中添加5000,请执行以下操作:

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

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

不是没有看到数据,不。我的第一个猜测是,你的数据在行尾有空格,因此
/\d+$/
不匹配。如果你使用
$
,那么使用
g
@AwPa是没有意义的。你为什么要去掉它?您显示的代码和输入文件不足以重现您的问题。请创建一个说明问题的列表,并将其编辑到您的问题中。请不要显示“看起来像这样”的数据。给我们实际的数据。另外,请检查我最初提到的空白。安迪·莱斯特因
while ( my $line = <$fh> ) {
    chomp $line;
    my @fields = split( /:/, $line );
    $fields[2] += 5000;
    say join( ':', @fields );
}