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