我有一个脚本,可以使用Getopt::Long
. 某些标志不允许混用,例如:--linux --unix
不允许一起提供。我知道我可以使用if
语句进行检查。有没有更清洁和更好的方法来做到这一点?
if
如果我不想允许许多标志组合,块可能会变得丑陋。
Getopt::Long似乎没有这样的功能,在快速搜索 CPAN后没有任何突出显示。但是,如果您可以使用散列来存储您的选项,那么创建自己的函数似乎并不太难看:
use warnings;
use strict;
use Getopt::Long;
my %opts;
GetOptions(\%opts, qw(
linux
unix
help
)) or die;
mutex(qw(linux unix));
sub mutex {
my @args = @_;
my $cnt = 0;
for (@args) {
$cnt++ if exists $opts{$_};
die "Error: these options are mutually exclusive: @args" if $cnt > 1;
}
}
这也扩展到超过 2 个选项:
mutex(qw(linux unix windoze));