Ответ 1
Многие системы реализуют "оптимистичные" файловые операции. Под этим я подразумеваю, что вызов, например, print
, который должен добавить некоторые данные в файл, может успешно вернуться до фактического написания данных к файлу или даже до того, как достаточно свободного места зарезервировано на диске для успешной записи.
В этих случаях, если диск почти заполнен, все ваши отпечатки могут оказаться успешными, но когда пришло время закрыть файл и вывести его на диск, система понимает, что нет места. Затем вы получаете сообщение об ошибке при закрытии файла.
Эта ошибка означает, что весь вывод, который, по вашему мнению, вы сохранили, может быть вообще не сохранен (или частично сохранен). Если это важно, ваша программа должна сообщить об ошибке (или попытаться исправить ситуацию или...).
Все это может произойти в дескрипторе файла STDOUT
, если он подключен к файлу, например. если ваш script запущен как:
perl script.pl > output.txt
Если данные, которые вы выводите, важны, и вам нужно знать, действительно ли все написано правильно, вы можете использовать оператор, который вы указали, чтобы обнаружить проблему. Например, во втором фрагменте script явно вызывает die
, если close
сообщает об ошибке; шаблон tchrist работает под use autodie
, который автоматически вызывает die
, если close
не работает.
(Это не гарантирует, что данные хранятся постоянно на диске, хотя в них также играют другие факторы, но это хорошая индикация ошибки, т.е. если это закрывается, вы знаете, что у вас есть проблема.)