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