使用三个选项作为参数

TTa*_*Ta4 1 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");
}
Run Code Online (Sandbox Code Playgroud)

但是对于三种选择,它会有点混乱(太多ifs).有没有干净的方法呢?如果可能的话,不使用像xor(仅if-else-unless)这样的额外运算符.

GMB*_*GMB 7

因此,您需要确保定义一个且仅一个选项.

您可以先使用grep计算定义了多少选项:

my $count_defined_options = grep { defined } $a, $b, $c;
Run Code Online (Sandbox Code Playgroud)

然后你可以检查$ count_defined_options的值:

  • 0:中止,因为没有给出选项

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