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

6tqwzwtp  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(192)

假设我想输入两个命令行参数-- source和destination。GetOptions允许命令行只检查参数名的第一个字符,而不是完整的字符串。我如何验证完整的参数字符串,而不是只允许传递其子字符串?
下面是一个示例程序:

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

它接受以下任何一项:

  • -from
  • -fro
  • -fr
  • -f
  • -to
  • -t

不过,我希望它只接受

  • -from
  • -to

并且如果传递了除这些完整字之外的任何内容,则失败。
如何禁用缩写选项?

ssgvzors

ssgvzors1#

默认情况下,启用缩写。禁用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 arguments\n";

例如,当传递-fro时,它将终止,并显示以下消息:

Unknown option: fro
Incorrect arguments
zpqajqem

zpqajqem2#

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

auto_abbrev

允许选项名称缩写为唯一性。除非已设定环境变量POSIXLY_CORRECT,否则预设为启用,在此情况下,“auto_abbrev“会停用。

相关问题