Еще один способ устранения проблем буферизации stdio отстоит в использовании вызовов функций sysread и syswrite. Эти вызовы обходят библиотеку stdio и преобразуются непосредственно в вызовы функций ввода-вывода операционной системы. Важным преимуществом этих вызовов является то, что они хорошо взаимодействуют с другими вызовами функций ввода-вывода низкого уровня, такими как вызов функции select с четырьмя параметрами, а также могут применяться в таких сложных методах, как неблокирующий ввод-вывод. Поведение Perl при этом, как уже отмечалось ранее, не зависит от платформы или конфигурации хостинга VPS/VDS , где размещено приложение.
Еще одним следствием того, что функции sys* обходят библиотеку stdio, является различие в поведении между read и sysread при получении ими запроса на выборку большего фрагмента данных, чем фактически имеется. Функция read (блокируется на неопределенное время, ожидая поступления именно того объема данных, который был затребован. Единственным исключением являемся то, когда дескриптор файла встречает конец файла перед тем, как будет удовлетворен запрос на весь объем данных; в этом случае функция read возвращает все, что находится перед концом файла. В отличие от этого, функция sysread может вернуть частично считанные данные. Если она не может сразу же прочесть весь объем затребованных данных, она возвращает доступные данные. Если нет доступных данных, функция sysread блокируется до тех пор, пока не сможет вернуть хотя бы один байт. В силу этого данная функция незаменима при использовании, в сетевой связи, где данные часто поступают в виде фрагментов непредсказуемого размера. Итак, можно сделать вывод, что для многих сетевых приложений лучше всего использовать функции sysread и syswrite.