Нужна ли проверка «закрыть FILEHANDLE» на наличие ошибок? - PullRequest
11 голосов
/ 15 января 2010

хорошо ли слово "or die $!" В строке "close $ fh or die $ !;"?

#!/usr/bin/env perl
use warnings;
use strict;

my $file = 'my_file';
open my $fh, '<', $file or die $!;

print <$fh>;

close $fh or die $!;

Ответы [ 3 ]

16 голосов
/ 15 января 2010

В вашем примере, так как он находится в конце вашего скрипта и в файле, открытом для чтения, он не нужен.

Я пытаюсь подумать, нужно ли это при чтении канала. Обычно вы закрываете после условия EOF, поэтому я думаю, что в этом нет необходимости.

Однако, если вы пишете, в близкое время могут быть обнаружены различные ошибки. Самый простой пример - полный диск. Об этом не может быть сообщено до закрытия дескриптора файла из-за буферизации.

Вы также можете use autodie (рекомендуется выше Fatal, я думаю).

8 голосов
/ 15 января 2010

Если файл открыт для чтения, то в этом нет необходимости.

Однако, когда файл открыт для записи, возможно, что буфер ввода-вывода не может быть сброшен на close, поэтому это может быть полезно в этом случае

0 голосов
/ 15 января 2010

Да, "или умри" должен это сделать.

Однако на практике проверка ошибок при закрытии файла не требуется, поскольку единственная ошибка, которую закрытие может дать вам разумно, - это «плохой дескриптор файла», то есть файл не был открыт в первую очередь - что означает, что он успешно выполнен в любом случае.

Вы также можете рассмотреть возможность использования Fatal. (perldoc Fatal)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...