-----Original Message-----
>From: [EMAIL PROTECTED]
>Sent: Aug 14, 2007 3:20 AM
>To: [email protected]
>Subject: piping and reading stdin
>
>I want to read from a pipe in my perl script invoked like:
>
>date | perl myperlscript.pl
>
>I understand that this puts the text outputted from the date program
>into the stdin. How could I check the buffer contained by the stdin
>without it blocking for you to input anything from the keyboard if
>nothing was piped in to the command.
>
>my perlscript contains something like:
>
>#this part im unsure about so im using functions that dont exist
>if(buffer_has_stuff_in_it(STDIN)){
> while(<STDIN>){
> print "$_\n";
> }
>}
>else{
> print "You didnt pipe anything into this program!\n";
>}
>
Hi,
You need an IO::Select object to be monitored,if it's timeouted,then die or
exit.
Just show my sample codes,hope this helps.
use strict;
use IO::Select;
my $timeout=1; # wait for 1 second
open PIPE,'cat|' or die $!; # since 'cat' doesn't input anything,program would
die after 1 sec.
my $oldhd=select PIPE;$|++;select $oldhd;
my $s = IO::Select->new();
$s->add(\*PIPE);
if (my @ready = $s->can_read($timeout)) {
my @content=<PIPE>;
print @content;
}else {
die "no input\n";
}
close PIPE;
--
Jeff Pang <[EMAIL PROTECTED]>
http://home.arcor.de/jeffpang/
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/