Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

RE: Re: How do I read just one key at a time?

by plaid (Chaplain)
on Mar 01, 2000 at 03:05 UTC ( [id://4591]=note: print w/replies, xml ) Need Help??


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

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://4591]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (3)
As of 2024-04-25 10:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found