nah, it seems i was once again suffering from severe foot-in-mouth syndrome, and zaxo was indeed right on the money suggesting IO::Select. What the problem basically comes down to is using <> on a filehandle that has no data waiting, resulting in the script freezing until some data comes along. IO::Select's ability to tell you in advance if there is data allows me to avoid that issue, hence fixing my problem.
Great thanks to all of those who replied, Zaxo in particular :-)