替换单词后如何覆盖文件?

Yeo*_*eom 2 perl file

我想替换文件中的文本并覆盖文件。

use strict;
use warnings;

my ($str1, $str2, $i, $all_line);
$str1 = "AAA";
$str2 = "bbb";

open(RP, "+>", "testfile") ;

$all_line = $_;
$i = 0;
while(<RP>) {
        while(/$str1/) {
        $i++;
        }
        s/$str1/$str2/g;
        print RP $_;
}
close(RP);
Run Code Online (Sandbox Code Playgroud)

zdi*_*dim 5

正常的过程是逐行读取文件并将每行(根据需要/如果需要更改)写入新文件。全部完成后,尽可能自动地重命名该新文件,以便覆盖原始文件。

这是一个为我们完成所有这些操作的库的示例,Path::Tiny

use warnings;
use strict;
use feature 'say';

use Path::Tiny;
    
my $file = shift || die "Usage: $0 file\n";

say "File to process:";
say path($file)->slurp;

# NOTE: This CHANGES THE INPUT FILE
#
# Process each line: upper-case a letter after .
path($file)->edit_lines( sub { s/\.\s+\K([a-z])/\U$1/g } );

say "File now:";
say path($file)->slurp;
Run Code Online (Sandbox Code Playgroud)

在找到该字母的每一行上,将点(句点)后面的字母、一些空格之后的字母大写,并原封不动地复制所有其他行。(这只是一个例子,不是正确的语言修复。)

注意:输入文件是就地编辑的,因此完成后它将被更改。


此功能是在 2016 年 2 月 10 日的模块版本 0.077中引入的。(作为参考,Perl 版本 5.24 于 2016 年 8 月发布。因此,对于 Perl 5.24 或更高版本的系统,Path::Tiny从操作系统包安装或作为默认 CPAN 版本安装应该具有此方法。)