如何检查是否只设置了一个三个变量

时间:2014-10-30 06:28:40

标签: perl getopt-long

我想限制用户输入(通过GetOpt :: Long)只有一个值,可能有三个值。值为'pc-number','ip-address'和'surname'。

当有两个值时,我正在执行以下操作:

if ((!$pc_number and !$address) or ($pc_number and $address)) {
    pod2usage("You must supply pc_number OR ip_address.");
    exit;
} elsif ($pc_number) {
    (do stuff)
}

如何确保用户只设置三个变量中的一个?

2 个答案:

答案 0 :(得分:4)

使用grep计算真值的数量。如果合适,还可以检查defined

if ( 1 != grep {$_} ( $pc_number, $address, $surname ) ) {
    pod2usage "You must supply one and only one parameter: pc_number, ip_address, surname.";
    exit;

} elsif ($pc_number) {
    ...;

答案 1 :(得分:2)

这似乎是这样做的:

if (($x xor $y xor $z) and not $x && $y && $z) {
    ... # one (and only one) is true
}

...虽然我不确定这是你想要在代码中遇到的那种你必须要维护的东西。