The low-level way of handling this sort of thing is to setup all your IO (including the terminal input) as non-blocking, and then use select to dispatch code whenever input arrives or output is flushed at a socket/handle, and possibly do other stuff in between.
in reply to Writing Interrupt proram in PERL
I'd recommend POE::Wheel::Readline in this case - it takes care of a lot of stuff for you, but you do need to read up a bit on POE. See also the example at the poe.perl.org site
updated: fixed link to PWR