Perl:使用Getopt::Long从命令行和[piped STDIN | file]获取参数
嗨,我想在Perl中使用Getop::Long实现命令行argument1和管道化STDIN(通过单个破折号“-”)或文件名argument2。在perldoc中,只提到了一点“命令行上的一个单独破折号现在将是一个合法选项,使用它将设置变量$stdio”:()。但这远远不是我能用的。我尝试了以下方法Perl:使用Getopt::Long从命令行和[piped STDIN | file]获取参数,perl,stdin,getopt-long,Perl,Stdin,Getopt Long,嗨,我想在Perl中使用Getop::Long实现命令行argument1和管道化STDIN(通过单个破折号“-”)或文件名argument2。在perldoc中,只提到了一点“命令行上的一个单独破折号现在将是一个合法选项,使用它将设置变量$stdio”:()。但这远远不是我能用的。我尝试了以下方法 #!/usr/bin/perl -w use strict; use Getopt::Long; my ($se, $st); GetOptions("se=s" => \$s, '' =&g
#!/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";
#/usr/bin/perl-w
严格使用;
使用Getopt::Long;
我的($se,$st);
GetOptions(“se=s”=>\$s,=>\$st)或die“用法:$0-s\n”;
$st=;
打印“$se\n$st\n”;
但是$st只返回第一行还是应该使用文件句柄?那么,如果没有一个单独的破折号“-”,并且文件名被指定为argument2怎么办?非常感谢,只需使用
(简称
)而不是
ARGV
是一个特殊句柄,如果@ARGV
为空,则从STDIN读取;如果@ARGV
为空,则从指定的每个文件读取
GetOptions("se=s" => \my $se)
or die "Usage: $0 -s <tab|space|comma>\n";
my $st = <>;
GetOptions(“se=s”=>\my$se)
或死“用法:$0-s\n”;
我的$st=;
你能举例说明你需要的用法吗?当您使用Getopt设置选项--o
(例如)时,script.pl-o val file
和echo“…”| script.pl-o val
将读取选项值,您可以使用while()
从管道或文件中读取。(这不是你想要的吗?@zdim它类似于script.pl-s tab filename
或head-3 filename | script.pl-s tab-
,那么它的工作原理应该与我的评论完全相同(请参见@ikegami-answer)。请注意,您不需要使用-
来获得所需的内容。啊哈,是的,非常感谢@zdimI尝试使用了而不是,它是相同的-只打印第一行。我想要的是类似于script.pl-s tab filename
或head-3 filename | script.pl-s tab-
@YiranGuo的东西。答案向您展示了原理,要点是使用
(无STDIN
)。为了读取更多内容,请使用while(){…}
而不是将其读入标量变量。(或者,您可以将其读入数组,然后数组将获取所有行,但我建议改用while
)