在不读取整个文件的情况下替换文件中的模式 - Perl

时间:2013-07-15 09:54:27

标签: perl

我想在我的文件中用'bad'替换'good'模式。目前我在做的是:

#!/perl/bin/perl

$filename= "abc.txt";

open my $fh, $filename;
my $text = do { local( $/ ); <$fh> };
close $fh;
$text =~s/good/bad/g;

有没有办法可以在不读完整个文件的情况下做到这一点?

编辑:假设我知道文件中只有1个“好”。

P.S.,嗨,我是新来的。希望我能正确地做到这一点。

1 个答案:

答案 0 :(得分:2)

您可以使用Tie::File

#!/usr/bin/perl
use strict;
use Tie::File;
my $filename = ...;
tie my @lines, 'Tie::File', $filename or die;
for (@lines) {
    s/good/bad/g and last;
}

要确保不是整个文件都在啜饮你想要逐行阅读,例如使用:

#!/usr/bin/perl
use strict;
use Tie::File;
my $filename = ...;
tie my @lines, 'Tie::File', $filename or die;
for(my $i=0; ; $i++) {
    last if !defined $lines[$i]; # eof
    last if $lines[$i] =~ s/good/bad/g;
}