假设我要输入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
并且如果通过除了那些完整单词之外的任何内容则会失败。
我如何禁止缩写选项?
答案 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
”被禁用。