Пропустить аргументы командной строки, а также ввести STDIN для Perl script?

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

Изменить

my $name = <>;

к

my $name = <STDIN>;

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