Пропустить аргументы командной строки, а также ввести 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
не будет пустым. Поэтому, когда вы используете оператор алмаза <>
для чтения имени, будет прочитана первая строка из файла, имя которого указано в командной строке.