Perl 如何使这个foreach循环工作?

Perl 如何使这个foreach循环工作?,perl,Perl,我已经编写了一个小代码,从test.dat文件的每一行中减去一个特定的数字499。但这是行不通的。输入在每行中包含一个数字。请帮帮我 open (F1, "test.dat" ); foreach $line (F1) { $x = 0; $x = $line-(499); print $x; $x = 0; } 这里有一些不同的错误。与其只告诉你它们是什么,不如从一小块开始。创建一个只读取test.dat的脚本,并打印出

我已经编写了一个小代码,从test.dat文件的每一行中减去一个特定的数字499。但这是行不通的。输入在每行中包含一个数字。请帮帮我

open (F1, "test.dat" );


foreach $line (F1)
 {  
    $x = 0; 
    $x = $line-(499);
    print $x;
    $x = 0;              
}

这里有一些不同的错误。与其只告诉你它们是什么,不如从一小块开始。创建一个只读取test.dat的脚本,并打印出它读取的每一行。开始你的脚本使用严格;并使用警告;,并声明变量,例如foreach my$line…

由于您的问题的主要短语是让您的foreach循环处理您的dat文件,下面是逐行处理的正确方法,并将其替换为空白字符串,假设您正试图实现这一点

$DATFILE = test.dat; 

open(DATFILE) or die("Could not open log file.");
foreach $line (<DATFILE>) {

    # do line-by-line processing. some what like this 
   if($line =~ /499/g) {

       $line  =~ s/499//g ;

   }

}

您的代码几乎没有问题:-

首先,您应该使用3-arg open来打开一个文件 您应该为文件句柄使用词法变量,而不是使用裸词 在foreach循环中,需要将文件句柄包含在 前两个是约定,但最后一个是逻辑错误

因此,以下是您需要做的更改:-

open my $fh, '<', 'test.dat' or die 'Cannot open file:, $!';

foreach (<$fh>) {

    # $_ is the default special variable that holds the current element in loop
    # You can process $_ and subtract `499` from it and print it.
}

如果您只想从每行中减去499,我只需执行以下操作:

perl -plwe '$_ -= 499' input.txt > output.txt
它与程序文件等效:

BEGIN { $^W = 1; }
BEGIN { $/ = "\n"; $\ = "\n"; }
while (<>) {
    chomp;
    $_ -= 499;
}
continue {
    die "-p destination: $!\n" unless print $_;
}
对于浮点数:

next unless /^[\d.]+$/;

对于科学记数法,有一些更复杂的东西,但也许我们不需要走那么远。

你能发布test.dattest.dat 139 448 711 315 696 983 784的片段吗line@VAR121但你说每一行都有499个?这将在任何地方取代499个。即使从一个数字的中间-3549955@RohitJain,但是那里的帖子评论说每行只有499个字符串或者其他字符串,比如535343424等等,这就是我贴的是的,你是对的。但您应该只更换499而不是34992/499/即使在34992内部也会匹配。将正则表达式替换为:-\b499\b@RohitJain好的,我知道了,我错过了/g,谢谢你纠正了它。我相信这个问题的意思是减法499,而不是删除它。你也可以写“打开我的$fh,”
next unless /^[\d.]+$/;