При чтении из файлового дескриптора IO :: Socket :: INET нельзя предполагать, что в потоке всегда будут доступны данные. Какие методы доступны для просмотра потока, чтобы проверить, доступны ли данные, или при чтении не берут данные без действительного завершения строки и сразу проходят чтение?
Установите параметр Blocking на 0 при создании сокета:
Blocking
0
$sock = IO::Socket::INET->new(Blocking => 0, ...);
Оформить заказ IO :: Выбрать ; это очень часто, что я использую при работе с сокетами неблокирующим способом.