6
#!/usr/bin/perl -sw
use strict;
use warnings;
use Getopt::Long;

my $remote = 0;
my $test = 0;
GetOptions ('remote' => \$remote, 'test' => \$test);
print "$remote:$test\n";

perl test.pl --remote --test

上面打印“0:0”。我是 Perl 的新手,所以我无法确定为什么这不起作用。

我还从http://perldoc.perl.org/Getopt/Long.html#Simple-options运行了“简单选项”部分,但这也没有产生任何结果。

4

2 回答 2

11

我相信-s您在 she-bang 行中包含的命令行选项正在咬您。根据perlrun 文档-s命令行选项:

在程序名称之后但在任何文件名参数之前(或在 -- 的参数之前)启用命令行上的开关的基本开关解析。

如果您删除该选项,事情应该会如您所愿。我还建议您删除,-w因为您已经在使用该use warnings指令(该use warnings指令功能更全面,基本上替换了该-w选项)。

所以,长话短说,做你的第一行:

#!/usr/bin/perl
于 2012-08-22T16:23:59.477 回答
0

请注意,如果通过 cmd 在 Windows 上运行脚本,则必须perl在脚本名称之前指定,否则 GetOptions 不起作用。

当我尝试在命令行上简单地调用我的 script.pl 而不先perl运行脚本但所有选项都没有被解析。

于 2018-11-01T08:26:13.550 回答