Если вы не хотите идти по низкоуровневому маршруту, вам придется поискать другие более интегрированные решения.
Вы можете использовать поток для чтения из входных данных и поместить все данные, которые он читает, в Thread :: Queue , который вы затем обрабатываете в своем основном потоке.
Вы можете посмотреть на POE , который реализует основанную на событиях структуру, особенно POE :: Wheel :: Run :: Win32 . Потенциально вы также можете украсть код из него, чтобы реализовать неблокирующее чтение.
Вы можете взглянуть на [Coro], который реализует кооперативную многозадачную систему с использованием сопрограмм. Это в основном похоже на потоки, за исключением того, что вы получаете потоки пользовательского пространства, а не системные потоки.
Вы не указали, как далеко вы хотите продвинуться, но вы выбираете между sysread
и фреймворком, или пишете саму фреймворк. Самый простой путь - использовать потоки или код Poe::Wheel::Run::Win32
.
.