 
Use the CPAN module Term::ReadKey, and try to read a key in non-blocking mode by passing it an argument of -1:
use Term::ReadKey;
ReadMode ('cbreak');
if (defined ($char = ReadKey(-1)) ) {
    # input was waiting and it was $char
} else {
    # no input was waiting
}
ReadMode ('normal');                  # restore normal tty settingsThe -1 parameter to ReadKey indicates a non-blocking read of a character. If no character is available, ReadKey returns undef.
The documentation for the Term::ReadKey module from CPAN; Recipe 15.6
 
Copyright © 2003 O'Reilly & Associates. All rights reserved.