in reply to Ignore STDIN during processing
Here's A Way To Do It...
#!/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")...
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: Ignore STDIN during processing
by csotzing (Sexton) on Jun 18, 2002 at 13:50 UTC |
In Section
Seekers of Perl Wisdom