Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Arguments from CLI or <STDIN>

by burszuras (Initiate)
on Aug 04, 2017 at 12:45 UTC ( [id://1196720]=perlquestion: print w/replies, xml ) Need Help??

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

I want to make my program to get arguments from the CLI if there are any, otherwise it should use <STDIN> (keyboard). I've read about the "diamond operator" in the Llama book but it treats invocation arguments as files from which it should read input. Is there any way to accomplish this without cluttering the code with unnecessary ifs?

Replies are listed 'Best First'.
Re: Arguments from CLI or <STDIN>
by hippo (Bishop) on Aug 04, 2017 at 13:12 UTC
    #!/usr/bin/env perl use strict; use warnings; if (scalar @ARGV) { print "Processing CLI args: @ARGV ...\n"; } else { print "Reading from STDIN\n"; while (<>) { chomp; print "Got $_\n"; } }
Re: Arguments from CLI or <STDIN>
by golux (Chaplain) on Aug 04, 2017 at 19:25 UTC
    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
Re: Arguments from CLI or <STDIN>
by thanos1983 (Parson) on Aug 04, 2017 at 13:00 UTC

    Hello burszuras,

    Welcome to the Monastery. Can you provide us a bit more information? What do you mean is not so clear what you want. What you have tried and you want to update/modify?

    I found a similar question Command lines Args and STDIN, but most likely is not what you are looking.

    Looking forward to your update, BR

    Seeking for Perl wisdom...on the process of learning...not there...yet!
Re: Arguments from CLI or <STDIN>
by Anonymous Monk on Aug 04, 2017 at 19:47 UTC
    What the heck does it mean, anyway, to "clutter the code with unnecessary ifs?" Code what you M-E-A-N!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1196720]
Front-paged by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2024-04-19 07:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found