无法解析命令行长选项

Posted

技术标签:

【中文标题】无法解析命令行长选项【英文标题】:Unable to parse command line long options 【发布时间】:2012-08-18 02:49:24 【问题描述】:
#!/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 运行了“简单选项”部分,但也没有产生任何结果。

【问题讨论】:

@raina77ow - 我确实有,只是没有包含在这篇文章中。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

#!/usr/bin/perl

【讨论】:

谢谢,我之前将它用于短命令,但想替换那些(因为我一直在使用完整的单词。)

以上是关于无法解析命令行长选项的主要内容,如果未能解决你的问题,请参考以下文章

解析Python和单击命令行选项

使用getopt命令解析shell脚本的命令行选项

Python:正确处理子命令的全局选项的参数解析器

C++无法解析的外部命令和外部符号

vs2010 error:1个无法解析的外部命令

Perl模块 Getopt::Long 解析