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

时间:2016-02-10 05:06:52

标签: perl perl-module

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;

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

现在我想使用相同的旧文件句柄读取更新的数据,而无需重新打开文件。有没有可能做到这一点?

上面的代码没有读取更新的数据。

1 个答案:

答案 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;