Аргументы командной строки
Perl отображаются в переменной @ARGV
.
my( $filename ) = @ARGV;
Однако Perl также имеет специальный обработчик файлов ARGV, который открывает файлы, указанные в командной строке.
while( <ARGV> ) { ... }
Еще лучше, ARGV является дескриптором файла по умолчанию:
while( <> ) { ... }
И ARGV включает стандартный ввод, если вы не указали никаких аргументов. Это означает, что last while
работает в любом из этих вызовов:
% perl script.pl filename.txt
% perl script.pl < filename.txt
В вашей программе вы читаете из STDIN, а это другое дело. Это стандартный ввод, не связанный с аргументами командной строки. Это данные, которые вы отправляете программе после ее запуска. Например, вы можете запросить имя файла:
print "Enter the filename: ";
my $filename = <STDIN>;
chomp( $filename );