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

15,819

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.

Share:
15,819

Related videos on Youtube

naveenhegde
Author by

naveenhegde

Updated on March 26, 2020

Comments

  • naveenhegde
    naveenhegde over 3 years

    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?

  • tadmc
    tadmc over 12 years
    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.
  • Colin
    Colin over 8 years
    Using shift worked for me, whereas changing <> to <STDIN> did not