Передать аргументы командной строки, а также ввод из STDIN для сценария Perl? - PullRequest
11 голосов
/ 25 марта 2011

У меня есть сценарий Perl, который принимает оба аргумента командной строки и 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";

Он не останавливается на вводе stdinРаботает нормально для любой из командной строки или стандартного ввода, но не для обоих.

Любая причина?

1 Ответ

19 голосов
/ 25 марта 2011

Изменение

my $name = <>;

до

my $name = <STDIN>;

Если @ARGV не имеет элементов, оператор diamond будет читать из STDIN, но в вашем случае, поскольку вы передаете аргументы через командную строку, @ARGV не будет пустым. Поэтому, когда вы используете алмазный оператор <> для чтения имени, будет прочитана первая строка из файла, имя которого указано в командной строке.

...