Perl:使用Getopt :: Long从命令行和[piped STDIN | file]中获取参数

时间:2018-12-12 17:36:08

标签: perl stdin getopt-long

嗨,我想使用Perl中的Getop :: Long实现命令行参数1和管道STDIN(通过单个单破折号'-')或文件名作为参数2。在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只返回第一行还是应该使用文件句柄?然后,如果没有单独的单破折号“-”,并且将文件名指定为arguments2怎么办?非常感谢,

1 个答案:

答案 0 :(得分:2)

仅使用<><ARGV>的缩写)代替<STDIN>ARGV是一个特殊的句柄,如果@ARGV为空,则从STDIN读取,如果不是,则从@ARGV中指定的每个文件中读取。

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

my $st = <>;