Вам предоставляется объект IO::File
или типglob (\*STDOUT
или Symbol::symbol_to_ref("main::FH")
); как бы вы определили, является ли это ручкой чтения или записи? Интерфейс не может быть расширен для передачи этой информации (я переопределяю close
, чтобы добавить вызовы к flush
и sync
до фактического закрытия).
В настоящее время я пытаюсь выполнить flush
и sync
дескриптор файла и игнорировать ошибку "Invalid argument"
(это то, что я получаю при попытке flush
или sync
читать дескриптор файла):
eval { $fh->flush; 1 } or do {
#this seems to exclude flushes on read handles
unless ($! =~ /Invalid argument/) {
croak "could not flush $fh: $!";
}
};
eval { $fh->sync; 1 } or do {
#this seems to exclude syncs on read handles
unless ($! =~ /Invalid argument/) {
croak "could not sync $fh: $!";
}
};