open filehandle, "<temp.txt";
@opt=<filehandle>;
open file, ">temp.txt";
print file "a\n";
print file "b\n";
print file "c\n";
print file "y\n";
print file "x\n";
print file "d\n";
close $file;
seek filehandle, 0,0;
@a=<filehandle>;
foreach $f (@a){
#while (<filehandle>) {
print ;
}
close filehandle;
我在读取模式下打开的文件中有一些数据。稍后,我通过在写入模式下打开然后关闭写入模式的文件句柄来更新数据。
现在我想使用相同的旧文件句柄读取更新的数据,而无需重新打开文件。有没有可能做到这一点?
上面的代码没有读取更新的数据。
答案 0 :(得分:0)
您走在正确的轨道上...主要问题是您打开了file
,一个裸字,但关闭了$file
,一个变量。
但是,您应该停止使用裸字文件句柄,因为它们对于其他perl进程是全局的,并且还可能与将来的函数或来自其他模块的函数冲突。相反,对文件句柄使用词法(my
)变量。我建议使用use strict
启动脚本以强制(除其他外)所有变量都已正确声明和作用域。它还建议您添加use warnings
以捕获脚本中的更多错误。
这是一种更正确的方式来做你想做的事情
use strict;
use warnings;
my $filename = 'temp.txt';
open my $fh_read, '<', $filename;
my @input = <$fh_read>;
open my $fh_write, '>', $filename;
print {$fh_write} "new data goes here\n";
close $fh_write;
seek $fh_read, 0, 0;
my @new_input = <$fh_read>;
print for @new_input;