You could use a select loop, or an event pacakge with a select loop at its heart (POE or something else compatible with AnyEvent, like a single Win32::GUI or other toolkit thread) without breaking out into processes or threads yourself.
Comment on Re: Windows Serial Port Logging using Win32-SerialPort