Perl 在脚本中就地编辑

Perl 在脚本中就地编辑

我需要就地编辑文件之内一个 perl 脚本,因此经常使用一行代码:

perl -p -e s/<value>/<value>/ig 

对于这种情况不起作用。如何从 perl 脚本中获得相同的结果?

open(CRONTAB, "+<file" || die "...";

while (<CRONTAB>) { 
   if ($_ =~ /value/) {  
      s/^\#+//;  
      print "$_\n";  
   }  
}

我的打印结果正是我想要的。这正是我所寻找的就地编辑。

答案1

do {
  local $^I='.bak'; # see perlvar(1)
  local @ARGV=("file");
  while(<>){
    s/<value>/<value>/ig;
    print;
  }
};

但要小心:$^I像 perl 这样的语言-i并不是防崩溃的。

答案2

您的编辑看起来非常简单。您是否考虑过简单地使用sed使用 -i 选项?

答案3

-i尝试一下,基于perldoc perlrun

use strict;
use warnings;
my $filename = "something";
my $extension = '.orig';
while (<>) {
    my $backup;
    if ($extension !~ /\*/) {
        $backup = $filename . $extension;
    }
    else {
        ($backup = $extension) =~ s/\*/$filename/g;
    }
    rename $filename, $backup;
    open my $outfile, '>', $filename;
    select $outfile;
    s/^\#+// if /value/; 
}
continue {
    print;  # this prints to original filename
}
select STDOUT;

答案4

使用文件::就地

此外,在您对文件进行所有更改后,它还可以提交/回滚......

相关内容