使用三个选项作为参数

时间:2018-11-26 08:06:40

标签: perl

我想知道在以下情况下检查选项的最佳方法是什么

  • 只能使用其中一个选项。
  • 必须使用至少一个选项。

如果我们谈论两种选择,那么这很简单(Perl中的示例):

if(defined($a) && defined($b)) {
    abort("Please use only one of the flags: a or b");
}

unless(defined($a) || defined($b)) {
    abort(1,"Please use a or b");
}

但是对于三个选项,会有些混乱(如果太多)。 有什么清洁的方法吗?如果可能的话,不使用诸如xor(仅if-else-unless)之类的额外操作符。

2 个答案:

答案 0 :(得分:7)

因此,您需要确保定义了一个且只有一个选项。

您可以先使用grep计数定义多少个选项:

my $count_defined_options = grep { defined } $a, $b, $c;

然后,您可以检查$ count_defined_options的值:

  • 0:中止,因为未提供任何选项

  • 2或更多:中止,因为给出了太多的选项

答案 1 :(得分:2)

由于Perl转换操作符类型以匹配操作数的方式,您可以将if语句更改为。

if((defined($a) + defined($b) + defined($c)) > 1) {
    abort("Please use only one of the flags: a, b or c");
}

您的unless语句可以像这样扩展

unless (defined($a) || defined($b) || defined($c) ) {
    abort(1,"Please use a, b or c");
}

但是,如果您有多个操作数,unless语句将很难解析,因此请趁此机会将其重写为

if (! (defined($a) || defined($b) || defined($c) ) ) {
    abort(1,"Please use a, b or c");
}