Использование отдельного дескриптора файла для чтения временного файла, созданного с использованием 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 предлагают