ShaneMetler has asked for the wisdom of the Perl Monks concerning the following question:

ohh perl masters ...

i am trying to get perl_script.pl to accept a redirected file,

#> perl_script.pl < data_file.txt
or execute a different code block when perl_script.pl is run without input.
#> perl_script.pl
the problem that i've run into, is that the while loop to accept STDIN (for piping in a data file), also waits forever for consol entered data (when the piped data file is not present). how can i bypass this consol data option?

piped data vs consol data is equivalent from the perl script's perspective, so there isn't a way to test whether the input is piped data vs. consol data?

another approach i couldn't resolve is if there is anyway to timeout reading from STDIN? the piped data would be fed within seconds, but all code execution seems to stop at the first itteration of the while(<stdin>) loop, waiting for consol data ...

or are there other options available? i know many scripts have this sort of duel functionality.

thanks in advance,
Shane Metler
shane<nospam>@<nospam>shanemetler.com

Edit by tye, preserve formatting

Replies are listed 'Best First'.
Re: accept piped stdin, but bypass consol entry
by liz (Monsignor) on Sep 18, 2003 at 17:42 UTC
    -t

    if (-t) { # execute default code block } else { # process STDIN }

    Liz

      i'm humbled by your great wisdom ...

      short, simple, and best of all it works!

      many thanks,
      Shane