Perl: принимать аргументы как из командной строки, так и из [piped STDIN | file], используя Getopt :: Long - PullRequest
0 голосов
/ 12 декабря 2018

Привет! Я хотел реализовать как аргумент1 командной строки, так и либо STDIN по каналу (через одиночную черту '-'), либо имя файла в качестве аргумента2, используя Getop :: Long в Perl.В perldoc просто упоминается чуть-чуть «Одиночная черта в командной строке теперь будет допустимой опцией, и при ее использовании будет установлена ​​переменная $ stdio»: (https://perldoc.perl.org/Getopt/Long.html). Но это далеко от того, что я могу использовать. Я попробовал следующее

#!/usr/bin/perl -w
use strict;
use Getopt::Long;
my ($se, $st);
GetOptions("se=s" => \$s, '' => \$st) or die "Usage: $0 -s <tab|space|comma>\n";
$st = <STDIN>;
print "$se\n$st\n";

Однако $ st возвращает только первую строку или мне следует использовать файловый дескриптор? Тогда что, если одиночного тире '-' нет, а имя файла указано в качестве аргумента 2?Большое спасибо,

1 Ответ

0 голосов
/ 12 декабря 2018

Просто используйте <> (сокращение от <ARGV>) вместо <STDIN>.ARGV - это специальный дескриптор, который читает из STDIN, если @ARGV пусто, и читает из каждого из файлов, указанных в @ARGV, если это не так.

GetOptions("se=s" => \my $se)
   or die "Usage: $0 -s <tab|space|comma>\n";

my $st = <>;
...