in reply to When is a while not a while?

I think you need to explore the wonders of Term::ReadKey, which has lots of neat tricks but one of them is the function ReadKey.

And I quote from perldoc Term::ReadKey ( slightly reformatted to make it read easier )

ReadKey MODE [, Filehandle] Takes an integer argument, which can currently be one of the following values: 0 Perform a normal read using getc -1 Perform a non-blocked read >0 Perform a timed read (If the filehandle is not supplied, it will default to STDIN.) If there is nothing waiting in the buffer during a non-blocked read, then undef will be returned. Note that if the OS does not provide any known mechanism for non-blocking reads, then a `ReadKey -1' can die with a fatal error. This will hopefully not be common.
You can play meaner games with select() if you cannot get this module installed.