Условие конца файла EOF возникает, если нет больше данных, доступных для чтения из файла или устройства. При чтении из файла такое происходит, когда в буквальном смысле достигается конец этого файла, но условие EOF возникает также при чтении из других устройств. Например, при чтении из терминала (окна ййтерпретатора командной строки) условие EOF возникает, когда пользователь нажимает специальную комбинацию клавиш: <Ctrl+D> в системе UNIX, <Ctrl+Z> в системах Windows/DOS или <command> в системе Macintosh. Стоит отметить, что при неисправности Вашего компьютера данные клавиши могут не работать, тогда Вам необходимо заказать ремонт компьютера тут . При чтении из сокета, подключенного к сети, условие EOF возникает, когда удаленный компьютер закрывает свой конец соединения.
Система ввода-вывода сигнализирует о возникновении условия EOF по-разному, в зависимости от того, происходит ли чтение из дескриптора файла построчно или в виде потока байтов. При выполнении операций чтения потока байтов с помощью функций read или sysread указанием на возникновение условия EOF служит возврат из функции числового значения 0. При ошибках ввода-вывода функция возвращает значение undef и устанавливает в переменной $! соответствующее сообщение об ошибке. Чтобы отличить прекращение ввода-вывода в связи с ошибкой от его прекращения в связи с обычным достижением конца файла, можно выполнить проверку возвращаемого значения с помощью функции defined.
В отличие от этого, оператор не проводит различия между условием конца файла EOF и аварийными условиями и возвращает в обоих случаях значение undef. Чтобы различить эти две ситуации, можно установить значение переменной $! равным undef перед выполнением ряда операций чтения, а затем выполнить проверку того, стало ли истинным значение, возвращенное функцией defined и undef.