Использование отдельного дескриптора файла для чтения временного файла, созданного с использованием File::Temp

Я создал временный файл, используя 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 ответа

Чтобы клонировать ("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");

Использование $filename вместо $fh:

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

Или использовать dup как @ikegami предлагают

Другие вопросы по тегам