2017-07-27 34 views
2

我使用File :: Temp创建了一个临时文件,并向其中添加了一些数据。在其他某个时间点,我想使用单独的文件句柄(seek方法)读取临时文件。以下是代码片段。使用单独的文件句柄来读取使用File :: Temp创建的临时文件

#!usr/local/bin/perl 
use File::Temp qw(tempfile); 

my ($fh, $filename) = tempfile(SUFFIX => '.txt'); 
my $towrite = "XXXX\nYYYY\nZZZZ\n"; 

open ANOTHERFH, "<", $fh or die "Cannot open $FH\n"; 
while (<ANOTHERFH>) { 
    print "ANOTHERFH: $_"; 
} 
close ANOTHERFH; 

不过,我得到一个错误,指出“无法打开GLOB ......” 任何建议

+2

第三个参数为'open'应该是一个文件名(所以'$ filename'),而不是一个文件句柄('$ fh')。 – mob

回答

1

克隆(“DUP”)的系统文件句柄,语法是

open(my $fh, '<&', $fh_to_dup)   # dups into a new fd 

open($existing_fh, '<&=', $fh_to_dup) # dupds into fd fileno($existing_fh) 

所以要

open(my $ANOTHER_FH, "<&", $fh)   # Avoid needless use of globals! 
    or die("Can't dup temp file: $!\n"); 
1

使用$filename,而不是$fh

open ANOTHERFH, "<", $filename or die "Cannot open $filename\n"; 

或者使用dup作为@ikegami建议

相关问题