首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl:使用GetOptions过滤无效参数

Perl:使用GetOptions过滤无效参数
EN

Stack Overflow用户
提问于 2012-02-12 21:12:31
回答 1查看 1.3K关注 0票数 4

我正在用Perl编写一个小脚本,在命令行中使用参数时遇到了问题。我使用GetOps来解析它们,如下面的代码所示:

代码语言:javascript
复制
%params = (
  "help" => "",
  "no_inline" => "",
  "no_dupl" => ""
);

&paramError if (!GetOptions(
  "help" => \$params{"help"},
  "no-inline" => \$params{"no_inline"},
  "no-duplicates" => \$params{"no_dupl"},
));

然后,我像这样运行脚本:

代码语言:javascript
复制
> script.pl --no-inline # ok, valid parameter
> script.pl --no-inline blahblah # blahblah is not valid
> script.pl --no-i # not valid

问题是,在第二和第三个例子中,GetOps说参数是有效的。我应该怎么做才能使这些参数无效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-12 21:33:52

你的第三个例子是有效的。只要缩写名称没有歧义,GetOptions就接受它们。

例如,如果您有一个名为no-indent的选项,那么您的第三个示例将被拒绝,因为它是不明确的,但是--no-inl仍然会被接受。

要禁用此功能,请使用:

代码语言:javascript
复制
use Getopt::Long qw(:config no_auto_abbrev);

有关其他选项,请参见Configuring Getopt::Long

您的第二个示例非常正常。在GetOptions调用之后,blahblah将留在@ARGV中。如果您的脚本只接受您指定的选项,而不能接受其他参数(如文件名或其他任何参数),则只需在调用后检查@ARGV是否为空。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9249055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档