On Wed, Jun 20, 2001 at 06:06:39PM -0500, Jay Strauss wrote:
> In perl, if I have a pgm:
> 
> while (<>) {
>     print "this is the line: $_";
> }
> 
> normally I'd invoke the pgm like:
> 
> echo "repeat this line" | ./pgm
> 
> But if I accidentally invoke it like:
> 
> ./pgm 
> 
> How would I prevent the while loop from running (i.e. pseudocode):
> 
> while (<>) if (exists <STDIN>) {
>     print "$_";
> }

Well, that won't work - and the while (<>) actually does that for you
automatically anyway.

It won't work though because STDIN /does/ exist.  It's the interactive
tty by default (when it's not getting a redirected input).

You can exploit /that/ fact, though, by doing this (tested):

-------
#!/usr/bin/perl -w

die "Hey!  I was expecting a redirected STDIN!\n" if (-t);
print "this is the line: $_" while (<>);
-------

The -t test evaluates to true if it's argument is a tty - if no arg is
given, STDIN is assumed.

Micah

Reply via email to