【问题标题】:Using a separate file handle to read a temporary file created using File::Temp使用单独的文件句柄读取使用 File::Temp 创建的临时文件
【发布时间】:2017-07-27 16:00:22
【问题描述】:

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

#!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....” 任何建议

【问题讨论】:

  • open 的第三个参数应该是文件名(所以 $filename),而不是文件句柄($fh)。

标签: perl temp filehandle


【解决方案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");

【讨论】:

    【解决方案2】:

    使用$filename 代替$fh

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

    或者按照@ikegami 的建议使用dup

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2011-04-24
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多