我有一个执行特定操作并根据结果更新文件的 Perl 脚本。
基本概述是:
- 从文件句柄 FILE 中读取一个值
- 执行一些操作,然后将结果与存储在 INPUT 文件中的值进行比较。
- 如果有变化,则更新文件句柄对应的文件。
当我说更新时,我的意思是用新的值覆盖 INPUT 文件中的现有值。
脚本概述:
#! /usr/bin/perl
use warnings;
use diagnostics;
$input=$ARGV[0];
open(FILE,"+<",$input) || die("Couldn't open the file, $input with error: $!\n");
# perform some operation and set $new_value here.
while(<FILE>)
{
chomp $_;
$old_value=$_;
if($new_value!=$old_value)
{
print FILE $new_value,"\n";
}
}
close FILE;
但是,这会将 $new_value 附加到文件而不是覆盖它。
我已经在几个地方阅读了有关这种 FILE Handle 模式的文档,并且在它所说的所有地方,读/写模式都没有附加。
我不确定,为什么它无法覆盖。我能想到的一个原因是,由于我正在读取 while 循环中的句柄并尝试同时覆盖它,因此它可能无法正常工作。
谢谢。