В одном Очень Полезном Скрипте программисту
понадобилось система вложенных каталогов:
yyyy/mm/dd
(год/месяц/день).
Чтобы упростить их создание, программист написал модуль:
MkDir.pm (файл скачивается)
Можно скачать пример использования.
Однако код, в котором использовался этот модуль,
стал иногда выдавать сообщение
print() on closed filehandle
. Почему так?
Ошибка появляется, когда скрипту не хватает прав на создание каталогов.
Но при чем здесь
может быть print() on closed filehandle
?
Главная проблема в том, что результат выполнения
mkdir
не проверяется.
Поэтому если создать каталог по какой-то причине не удалось, узнать об этом никак не получится.
Если же в якобы только что созданном каталоге попытаться
открыть файл, не проверить результат open
(как это происходит в примере кода),
и попытаться что-то туда записать
– возникает предупреждение о записи в неоткрытый дескриптор.
Мораль: всегда проверять результат
mkdir
, open
,
а для особо недоверчивых – и результат print
.