我有这个getopt:
GetOptions( GetOptions ("library=s" => \@libfiles);
@libfiles = split(/,/,join(',',@libfiles));
"help" => \$help,
"input=s" => \$fileordir,
"pretty-xml:4" => \$pretty
);
Getopt::Long::GetOptions
是否可以检测命令行上是否多次提供相同的选项?例如,我希望以下内容生成错误:
perl script.pl --input=something --input=something
由于
答案 0 :(得分:7)
我不认为有直接的方法,但你有两个选择:
使用数组并在处理选项后进行检查
#!/usr/bin/perl
use warnings;
use strict;
use Getopt::Long;
my @options;
my $result = GetOptions ('option=i' => \@options);
if ( @options > 1 ) {
die 'Error: --option can be specified only once';
}
使用子程序并检查选项是否已定义
#!/usr/bin/perl
use warnings;
use strict;
use Getopt::Long;
my $option;
my $result = GetOptions (
'option=i' => sub {
if ( defined $option) {
die 'Error: --option can be specified only once';
} else {
$option = $_[1];
}
}
);
在这种情况下,您可以在!
的开头使用感叹号die
,错误将被捕获并报告为常见的Getopt错误(请参阅documentation of Getopt::Long详情)