Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:使用Getopt::Long从命令行和[piped STDIN | file]获取参数_Perl_Stdin_Getopt Long - Fatal编程技术网

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

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

嗨,我想在Perl中使用Getop::Long实现命令行argument1和管道化STDIN(通过单个破折号“-”)或文件名argument2。在perldoc中,只提到了一点“命令行上的一个单独破折号现在将是一个合法选项,使用它将设置变量$stdio”:()。但这远远不是我能用的。我尝试了以下方法

#!/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