http://qs321.pair.com?node_id=1196749


in reply to Arguments from CLI or <STDIN>

Hi burszuras,

You may also be interested in the -t file test (on line 23):

-t Filehandle is opened to a tty.
which is a nice way to discover whether you're at the tail end of a pipe or not.

For example:

#!/usr/bin/perl use strict; use warnings; use feature qw( say ); use File::Basename; my $iam = basename($0); if (-t *STDIN) { my $nargs = @ARGV; say "Script '$iam' called from a terminal with $nargs arg(s):"; for (my $idx = 0; $idx < $nargs; $idx++) { printf " %2d. %s\n", $idx+1, $ARGV[$idx]; } } else { say "Script '$iam' is receiving input from a pipe"; }
Call the above script like this: ./script arg1 arg2 arg3 and you get:
Script 'script' called from a terminal with 3 arg(s): 1. arg1 2. arg2 3. arg3
If you call it like this, instead: echo Pipe to script | ./script then you'll get this:
Script 'script' is receiving input from a pipe
In the latter case, you could then do:
while (<STDIN>) { say "Got input: $_"; }
or similar, to handle the piped data as you desire.
say  substr+lc crypt(qw $i3 SI$),4,5