#!/usr/local/bin/perl -w use strict; use Fcntl; print "Enter some text to lose...\n"; sleep 4; print "Losing...\n"; fcntl(STDIN, F_SETFL, O_NONBLOCK) or die "Couldn't set STDIN to non-blocking I/O: $!\n"; my $buf; 1 while (sysread(STDIN, $buf, 4096)); print "Reading...\n"; fcntl(STDIN, F_SETFL, 0) or die "Couldn't set STDIN to blocking I/O: $!\n"; print scalar <STDIN>;
The code sleeps for 4 seconds, to let you type in some text. Then it loses that text, and reads in a line.
You might also need something more: the above code deals with whole lines, so any incomplete lines typed before the 4 seconds are up will be kept. To get rid of those, try this (on UNIX):
#!/usr/local/bin/perl -w use strict; use Fcntl; print "Enter some text to lose...\n"; sleep 4; print "Losing...\n"; system("/bin/stty raw"); die "stty failed\n" if $?; fcntl(STDIN, F_SETFL, O_NONBLOCK) or die "Couldn't set STDIN to non-blocking I/O: $!\n"; my $buf; print $buf while (sysread(STDIN, $buf, 4096)); print "Reading...\n"; system("/bin/stty cooked"); die "stty failed\n" if $?; fcntl(STDIN, F_SETFL, 0) or die "Couldn't set STDIN to blocking I/O: $!\n"; print scalar <STDIN>;
Have "fun" (for the UN*Xish definition of "fun")...
In reply to Re: Ignore STDIN during processing
by ariels
in thread Ignore STDIN during processing
by csotzing
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |