The easiest way to do this is to read a key in nonblocking mode with the Term::ReadKey module from CPAN, passing it an argument of -1 to indicate not to block:
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 settings