[EMAIL PROTECTED] wrote: > > Case 3. (this is the difficult case for me) the script is invoked > with no file and no pipe to it. I would like the script to > end quietly, such as >>test.input.source >> > > Instead, it waits for input. > >> test.input.source > no command line args - switching to STDIN > > > and now it waits forever.
select / IO::Select is what you are looking for. i suggested the following to someone who asked exactly the same question a while back. if you have searched this group hard enough, you would have found the solution: #!/usr/bin/perl -w use strict; #-- #-- script.pl #-- use IO::Select; if(@ARGV){ print join("\n", "get file: ",@ARGV) . "\n"; }else{ my $buf; my $line; my $io = IO::Select->new(\*STDIN); while($io->can_read(0)){ last unless(sysread(STDIN,$buf,1024)); $line .= $buf; } if(defined $line){ print "get line $line"; }else{ print STDERR "no input\n"; } } __END__ [panda]$ script.pl no input [panda]$ script.pl file.html get file: file.html [panda]$ echo "hi" | script.pl get line hi [panda]$ perldoc -f select perldoc IO::Select david -- sub'_{print"@_ ";* \ = * __ ,\ & \} sub'__{print"@_ ";* \ = * ___ ,\ & \} sub'___{print"@_ ";* \ = * ____ ,\ & \} sub'____{print"@_,\n"}&{_+Just}(another)->(Perl)->(Hacker) -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>