in reply to Re: How do I read just one key at a time?
in thread How do I read just one key at a time?

Getting input one character at a time doesn't involve using select and non-blocking I/O (at least not the easiest way). The way that the input is processed is set by the user's terminal. The default setting is known as 'canonical mode', which processes line-by-line. I also must correct my original statement, for there is indeed a way with the standard perl modules to do what you want. For example:
use POSIX qw(:termios_h); my $termios = new POSIX::Termios; $termios->setlflag(~ICANON); # Turn off canonical mode $termios->setcc(VMIN, 1); # Read a min of 1 character $termios->setcc(VTIME, 0); # No time-out on reads $termios->setattr(0, TCSANOW); # Apply settings to STDIN while(read(STDIN, $key, 1)) { print "Got: $key\r\n"; }
or something similar will work. The flags and function calls used by the POSIX::Termios module are nearly identical to the corresponding ones in C.

Replies are listed 'Best First'.
Re: RE: Re: How do I read just one key at a time?
by Anonymous Monk on Nov 20, 2003 at 19:13 UTC
    My PERL distribution doesn't have Curses or Posix::Term installed. I tried your last example but how do you get the terminal settings back to normal afterwards? I couldn't find documentation on this.
      correction to the last reply, instead of Posix::Term I meant Term::ReadKey