如何使用相同的旧文件句柄从文件中读取更新的数据

How to read updated data from a file using the same old file handle

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;

我在以读取模式打开的文件中有一些数据。稍后,我通过以写入模式打开然后关闭写入模式的文件句柄来更新数据。

现在我想在不重新打开文件的情况下使用相同的旧文件句柄读取更新后的数据。有没有可能做到?

以上代码不是读取更新后的数据。

你在正确的轨道上......主要问题是你打开了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;