use Term::ReadKey; ReadMode 3; # cbreak mode while ($stuff) { # Ping hosts and whatnot. if (defined($key = ReadKey(-1))) { # nonblocking read $key eq 'q' && exit 0 or $key eq '+' && $foo++ or $key eq '-' && $foo--; } }