在外部文件perl中用正则替代文本



我正在尝试拥有一个将在输入文件中更新变量的脚本。正则是匹配的,但没有执行替代。我究竟做错了什么。

sub updateInputDeck {
my $powerLevel = shift;
my $file = $outputFiles{input};
open INPUTFILE,"<",$file or die "Cannot open file $file $!n";
while (<INPUTFILE>) {
    if (s/((?<=s{3}RPs{2}=s{2})d+)/$powerLevel/) {
        print $_;
        print "Updating Input File for Power Level: $powerLevel";
     }
}
close INPUTFILE;
}

update

我正在尝试更新文件handle中指向的文件。我只能通过打印语句来做到这一点。如果是这样,我只想重印一行。这可能吗?

您可以使用Perl的原位编辑:

sub updateInputDeck {
    my $powerLevel = shift;
    my $file = $outputFiles{input};
    local @ARGV = ($file);
    local $^I = '.bac';
    while( <> ){
        s/((?<=s{3}RPs{2}=s{2})d+)/$powerLevel/;
        print;
    }
    #unlink "$file$^I" or die "Can't delete backup";
    return;
}

还要注意,您将全局$outputFiles{input}用作功能的参数是不良样式实践。而是将其作为参数传递给您的函数。

我认为您必须在2次中进行。首先将整个文件读取到数组中,在本地编辑并将整个内容写回原始文件。

open INPUTFILE,"<$file" or die "Cannot open file $file $!n";
my @lines = <INPUTFILE>; # Read in entire file.
close INPUTFILE;
open INPUTFILE,">$file" or die "Cannot open file $file $!n";
foreach $line (@lines) {
  $line =~ s/((?<=s{3}RPs{2}=s{2})d+)/$powerLevel/;
  print INPUTFILE $line;
}
close INPUTFILE;

最新更新