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

0 perl getopt-long command-line-arguments

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

这是一个示例程序:

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

它接受以下任何一项:

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

  • -to

  • -t

但是,我希望它只接受

  • -from
  • -to

如果除了那些完整的词之外的任何东西都通过了

我如何禁止缩写选项?

too*_*lic 8

默认情况下,启用缩写.禁用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";
Run Code Online (Sandbox Code Playgroud)

例如,当-fro传递时,它会消息:

Unknown option: fro
Incorrect arguements
Run Code Online (Sandbox Code Playgroud)


cho*_*oba 5

请参阅文档Getopt::Long中的"配置" :

auto_abbrev

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