gpt4 book ai didi

perl - 如何读写文件,语法错误

转载 作者:行者123 更新时间:2023-12-02 03:58:19 25 4
gpt4 key购买 nike

最后,我的脚本将要进行的新更改附加到文件末尾,而不是实际文件中。

open (INCONFIG, "+<$text") or die $!;
@config = <INCONFIG>;
foreach(@config)
{
if ( $_ =~ m/$checker/ )
{
$_ = $somethingnew;
}
print INCONFIG $_;
}
close INCONFIG or die;

最终,我想再次重写整个文本,但是如果某些字符串符合搜索条件,则需要对其进行修改。但是到目前为止,它仅将整个文件的另一份副本(有更改)附加到旧文件的底部。

我知道我可以关闭文件,然后使用另一个写文件-handle并将其解析。但是我希望能够了解我做错了什么以及如何修复它。

最佳答案

据我了解open,对文本文件使用读/写访问权限不是一个好主意。毕竟文件只是一个字节流:用不同长度的文件更新文件的一部分是让人头疼的事情;-)

这是我的方法:尝试模仿perl的-i“inplace”开关。因此,从本质上讲,我们写入了备份文件,稍后将对其进行重命名。 (在* nix系统上,打开文件句柄具有一些不可思议的作用,可以使删除的文件保持可用,因此我们不必创建新文件。无论如何,让我们来做吧。)

my $filename = ...;
my $tempfile = "$filename.tmp";
open my $inFile, '<', $filename or die $!;
open my $outFile, '>', $tempfile or die $!;

while (my $line = <$inFile>) {
$line = doWeirdSubstitutions($line);
print $outFile $line;
}

close $inFile or die $!;
close $outFile or die $!;

rename $tempfile, $filename
or die "rename failed: $!"; # will break under weird circumstances.

# delete temp file
unlink $tempfile or die $!;

未经测试,但显而易见的代码。这对您的问题有帮助吗?

关于perl - 如何读写文件,语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com