Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: Ignore STDIN during processing

by ariels (Curate)
on Jun 18, 2002 at 13:20 UTC ( [id://175351]=note: print w/replies, xml ) Need Help??


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
    More Info--
    I need my perl to work on both Unix & Win... (I don't believe that Fcntl and Non-Blocking I/O work on Win) Is there a way to do this? ...or am I stuck to just implement the Fcntl for Unix, and to hell with the Win users?

    print(map(lc(chr),split(6,qw/99672682673683684689632658645641610607/)));

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2024-03-29 10:32 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found