Perl读/写文件句柄-无法覆盖
我有一个Perl脚本,它执行一个特定的操作,并根据结果更新一个文件 基本概况如下: 从文件句柄、文件中读取值 执行一些操作,然后将结果与输入文件中存储的值进行比较。 如果有更改,则更新与文件句柄对应的文件。 当我说“更新”时,我的意思是用新值覆盖输入文件中的现有值 脚本概述:Perl读/写文件句柄-无法覆盖,perl,Perl,我有一个Perl脚本,它执行一个特定的操作,并根据结果更新一个文件 基本概况如下: 从文件句柄、文件中读取值 执行一些操作,然后将结果与输入文件中存储的值进行比较。 如果有更改,则更新与文件句柄对应的文件。 当我说“更新”时,我的意思是用新值覆盖输入文件中的现有值 脚本概述: #! /usr/bin/perl use warnings; use diagnostics; $input=$ARGV[0]; open(FILE,"+<",$input) || die("Couldn't o
#! /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_值附加到文件中,而不是覆盖它
我已经在几个地方阅读了关于这种文件句柄模式的文档,以及它所说的无附加的读/写模式
我不确定,为什么它无法覆盖。我能想到的一个原因是,由于我在while循环中读取句柄并试图同时覆盖它,所以它可能无法工作
谢谢。如果要设置为输出文件,您必须关闭文件句柄并打开另一个或相同的句柄。像这样
close FILE;
open FILE, ">$input" or die $!;
...
close FILE;
这应该可以做到您必须关闭文件句柄并打开另一个或相同的句柄(如果您愿意设置为输出文件)。像这样
close FILE;
open FILE, ">$input" or die $!;
...
close FILE;
这应该能奏效你的猜测是对的。首先读取文件,使文件指针实际位于旧值的末尾位置。我自己没有尝试过,但您可能可以在打印之前查找指向0的文件指针
seek(FILE, 0, 0);
你的猜测是对的。首先读取文件,使文件指针实际位于旧值的末尾位置。我自己没有尝试过,但您可能可以在打印之前查找指向0的文件指针
seek(FILE, 0, 0);
您应该将truncate与seek一起添加到程序中
由于文件是为读写而打开的,因此写入较短的$new_值将在文件中留下一些$old_值。截断将删除它
有关详细信息,请参阅perldoc-f seek和perldoc-f truncate。您应该将truncate与seek一起添加到程序中
由于文件是为读写而打开的,因此写入较短的$new_值将在文件中留下一些$old_值。截断将删除它
有关详细信息,请参阅perldoc-f seek和perldoc-f truncate。Hello。是的,我已经使用了这种变通方法,它对我很有效。但是,为了减少代码行数,我想使用相同的文件句柄。是的,我已经使用了这种变通方法,它对我很有效。但是,为了减少代码行数,我希望使用相同的文件句柄来执行此操作。