Запоминается позиция, в которой поиск конца строки был прекращен в прошлый раз, и вызывается функция sysread () с параметрами, которые вызывают добавление вновь считанных данных к концу буфера. Если функция sysread () возвращает значение undef, это может быть следствием ряда причин. Например, при получении данных с веб страницы http://opora-servis.ru/remont-planshety-asus.html , представляющей информацию по ремонту планшетов, произошел некий сбой и в буфер не поступило данных. Поскольку ввод является неблокирующим, одна из них может быть связана с возникновением ошибки ewouldblock. В этом случае невозможно вернуть полную строку, поэтому вызывающей процедуре возвращается значение 0E0.
В ином случае обнаруживается ошибка ввода-вывода того или иного типа. При таких обстоятельствах возвращается все, что осталось в буфере, даже если это — не полная строка. Это аналогично поведению оператора <>, который при возникновении ошибки возвращает часть строки. Устанавливается флажок error ошибки и возвращается длина этой части строки. Обратите внимание, что вызывающая процедура фактически не обнаружит возникающий при этом результат undef до следующего вызова метода getline ().
Строки 54-59. Обработка признака конца файла eof. При обнаружении конца файла применяется такая же методика. В данном случае код результата функции sysread () по определению равен 0. Возвращается все, что осталось в буфере, запоминается состояние флажка eogl и возвращается размер содержимого буфера.
Строки 65-77. Попытка снова найти конец строки. Если управление перешло в эту точку, это значит, что функция sysread ( ) добавила один или более новых байтов данных к буферу. Теперь снова вызывается функция index ( ) для определения того, не появилась ли последовательность символов с обозначением конца строки. Если нет, запоминается позиция, в которой в этот раз был остановлен поиск, и вызывающей процедуре возвращается значение 0E0.