PERL синтаксический анализ во входном файле командной строки - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы проанализировать входной файл с помощью командной строки. Я запустил, как показано ниже, но я получаю сообщение об ошибке (не могу открыть имя файла), когда я работал следующим образом: Мой код неправильный или то, что я набираю в командной строке, неверно?

commandline> perl script.pl FILENAME1.TXT

Ниже мой код для анализа во входном файле:

my $filename = <STDIN>;
open (my $file, '<', $filename) or die "could not open file '$filename': $!";
my $str = do {local $/; <$file>};
close $file;

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Вы пытаетесь прочитать $filename из стандартного ввода, когда это аргумент программы. Вероятно, вы хотите что-то вроде

my $filename = $ARGV[0]
0 голосов
/ 06 августа 2020
Аргументы командной строки

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 );
...