我正在用Perl编写一个小脚本,在命令行中使用参数时遇到了问题。我使用GetOps来解析它们,如下面的代码所示:
%params = (
"help" => "",
"no_inline" => "",
"no_dupl" => ""
);
¶mError if (!GetOptions(
"help" => \$params{"help"},
"no-inline" => \$params{"no_inline"},
"no-duplicates" => \$params{"no_dupl"},
));然后,我像这样运行脚本:
> script.pl --no-inline # ok, valid parameter
> script.pl --no-inline blahblah # blahblah is not valid
> script.pl --no-i # not valid问题是,在第二和第三个例子中,GetOps说参数是有效的。我应该怎么做才能使这些参数无效?
发布于 2012-02-12 21:33:52
你的第三个例子是有效的。只要缩写名称没有歧义,GetOptions就接受它们。
例如,如果您有一个名为no-indent的选项,那么您的第三个示例将被拒绝,因为它是不明确的,但是--no-inl仍然会被接受。
要禁用此功能,请使用:
use Getopt::Long qw(:config no_auto_abbrev);有关其他选项,请参见Configuring Getopt::Long。
您的第二个示例非常正常。在GetOptions调用之后,blahblah将留在@ARGV中。如果您的脚本只接受您指定的选项,而不能接受其他参数(如文件名或其他任何参数),则只需在调用后检查@ARGV是否为空。
https://stackoverflow.com/questions/9249055
复制相似问题