Perl 搜索并替换同一文件中的字符串,并计算替换的数字

Perl 搜索并替换同一文件中的字符串,并计算替换的数字,perl,Perl,我只是想搜索一个字符串Kumar并用Mahi替换该字符串。但产出并未到来。有人能告诉我哪里出了错吗 #!/usr/bin/perl -w use strict; open(my $fh, "+>","test.txt") || die "File not found"; my @lines = <$fh>; my @newlines; my $count; foreach my $line(@lines) { if($line =~/Kumar/i){

我只是想搜索一个字符串Kumar并用Mahi替换该字符串。但产出并未到来。有人能告诉我哪里出了错吗

#!/usr/bin/perl -w

use strict;

open(my $fh, "+>","test.txt") || die "File not found";
my @lines = <$fh>;

my @newlines;
my $count;
foreach my $line(@lines) {
   if($line =~/Kumar/i){   
   $line =~ s/Kumar/Mahi/ig;
   print $fh $line;
   #push(@newlines,$line);
   $count++;
   }
}

#print $fh @newlines;
close($fh);
我只是想搜索一个字符串Kumar并用Mahi替换该字符串

如果这只是你需要的,那么为什么不使用一个简单的一行呢

$ cat test.txt 
line1
Kumar
Line2
Kumar

$ perl -i -p -e 's/Kumar/Mahi/g' test.txt 

$ cat test.txt 
line1
Mahi
Line2
Mahi
更新:在这篇文章的生命周期中,问题标题和问题陈述已经发生了巨大的变化。因此,这个答案可能不再提供正确的解决方案

open(my $fh, "+>","test.txt")
这将在打开时截断文件。因此,当你来到阅读部分时,没有什么可读的。
您可能应该使用打开它以进行写入。

+>表示先截断文件,然后开始读取。最终你从文件中什么也得不到

+<表示读取文件并进行更新。但新文本将放置在文件末尾

因此,我想出于您的目的,您需要两个单独的文件处理程序来执行读写操作。有关文件I/O的详细信息,请参阅

$^I 就地编辑扩展名的当前值。使用undef禁用就地编辑。 助记符:i开关的值


你知道你只打印那些带有Kumar的行,对吗?也许你应该解释一下$^I,让每个人都能理解。好吧,它是perl命令行,相当于-i。而且这个答案不会将这些行写回截断的test.txt,并打印所有行,除了那些包含kumar的行。@DeVadder您尝试了哪个perl版本?@mpapec ActivePerl-5.16,但我相信我理解您为什么会问,$^i有效,我的评论表达得非常糟糕。我的意思是,输出文件仍然包含所有没有Kumar的行。而Op只保留这些行,并截断其余的行。然后,Op再次被截断,比阅读前更可取,因此不清楚Op实际上是否只想替换Kumar,或者是否有意删除所有其他行。@DeVadder check update。这就是一些问题的问题所在,代码没有遵循问题描述。哈!我会给你+1来打破你完美的3000次重复!哈哈哈。
open(my $fh, "+>","test.txt")
#!/usr/bin/perl

use strict;
use warnings;

$^I = "";
@ARGV = ("test.txt");

while (my $line = readline()) {

   print $line if $line =~ s/Kumar/Mahi/ig;
}
open($fh, "<", "file.txt") or die "cannot open file:$!\n";
while( my $line = <$fh>){
   $line =~ s/Kumar/Mahi/;
   print $line ."\n";
}
close($fh);