perl中的GetOptions()不验证完整的参数名称

时间:2017-05-04 15:24:28

标签: perl command-line-arguments getopt-long

假设我要输入2个命令行参数 - 源和目标。 GetOptions通过仅检查参数名称的第一个字符而不是完整字符串来允许命令行。 如何验证完整的参数字符串而不是仅允许其子字符串传递?

这是一个示例程序:

my ($source,$dest);
GetOptions(
'from=s' => \$source,
'to=s' => \$dest
) or die "Incorrect arguments\n";

它接受以下任何一项:

  • -from
  • -fro
  • -fr
  • -f

  • -to

  • -t

但是,我希望它只接受

  • -from
  • -to

并且如果通过除了那些完整单词之外的任何内容则会失败。

我如何禁止缩写选项?

2 个答案:

答案 0 :(得分:7)

默认情况下,启用缩写。禁用auto_abbrev。请参阅Getopt::Long

use warnings;
use strict;
use Getopt::Long qw(:config no_auto_abbrev);

my ($source,$dest);
GetOptions(
'from=s' => \$source,
'to=s' => \$dest
) or die "Incorrect arguements\n";

例如,当-fro被传递时,它将消失:

Unknown option: fro
Incorrect arguements

答案 1 :(得分:5)

请参阅documentation

中的“配置Getopt::Long
  

auto_abbrev

     

允许选项名称缩写为唯一性。默认                   除非环境变量POSIXLY_CORRECT具有,否则启用                   已设置,在这种情况下“auto_abbrev”被禁用。