Pass command line arguments as well as input from STDIN for Perl script?
Asked Answered
U

1

12

I have a Perl script which takes both command line arguments and STDIN

#!/usr/bin/perl -w
use strict;
use warnings;

my $logpath = $ARGV[0];
print "logpath : $logpath\n";

print "Name : ";
my $name = <>;
chomp($name);
print "my name is $name\n";

It does not stop at stdin input. Works fine for any one of command line or standard input but not for both.

Any Reason?

Unsegregated answered 25/3, 2011 at 10:8 Comment(1)
I'm sorry sir, but what do you want?Melitamelitopol
P
19

Change

my $name = <>;

to

my $name = <STDIN>;

If @ARGV has no elements, then the diamond operator will read from STDIN but in your case since you are passing arguments though command line, @ARGV will not be empty. So when you use the diamond operator <> to read the name, the first line from the file whose name is specified on the command line will be read.

Polecat answered 25/3, 2011 at 10:16 Comment(2)
It is a problem because <> reads from files in @ARGV. If you want it to read from stdin instead, then you need to ensure that @ARGV is empty. An alternative way to fix your program is to continue to use <>, but change to: my $logpath = shift; so that @ARGV will be empty.Brentbrenton
Using shift worked for me, whereas changing <> to <STDIN> did notMesne

© 2022 - 2024 — McMap. All rights reserved.