为什么我的Perl脚本会从文件中删除字符?

Ant*_*ine 1 perl file

我有一些Perl脚本的问题.它修改文件的内容,然后重新打开以写入文件,并在此过程中丢失一些字符.所有以'%'开头的单词都将从文件中删除.这很烦人,因为%表达式是对话框的可变占位符.

你知道为什么吗?源文件是具有默认编码的XML

这是代码:

undef $/;
open F, $file or die "cannot open file $file\n";
my $content = <F>;                                           
close F;                                                     

$content =~s{status=["'][\w ]*["']\s*}{}gi;

printf $content;

open F, ">$file" or die "cannot reopen $file\n";             
printf F $content;                                           
close F or die "cannot close file $file\n";
Run Code Online (Sandbox Code Playgroud)

bri*_*foy 26

你在printf那里使用它认为它的第一个参数是一个格式字符串.有关详细信息,请参阅printf文档 当我遇到这种问题时,我总是确保我正确使用这些功能.:)

你可能只想打印:

 print FILE $content;
Run Code Online (Sandbox Code Playgroud)

在您的示例中,您不需要读取整个文件,因为您的替换不会跨行.不要一次尝试读取和写入相同的文件名,而是使用临时文件:

open my($in),  "<", $file       or die "cannot open file $file\n";
open my($out), ">", "$file.bak" or die "cannot open file $file.bak\n";

while( <$in> )
    {
    s{status=["'][\w ]*["']\s*}{}gi;
    print $out;
    }

rename "$file.bak", $file or die "Could not rename file\n";
Run Code Online (Sandbox Code Playgroud)

这也减少了这个命令行程序:

% perl -pi.bak -e 's{status=["\']\\w ]*["\']\\s*}{}g' file
Run Code Online (Sandbox Code Playgroud)