2014-10-30 111 views
1

我想限制用户输入(通过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) 
} 

我怎么能简单地确保只有一个三个变量的用户设置?

回答

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) { 
    ...; 
+0

谢谢。这是一个很好的解决方案。 – unclemeat 2014-10-30 07:49:56

2

这似乎做到这一点:

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

...虽然我不知道这是你想要的,你必须维护的代码遇到的那种东西。

+0

这是一个很好的解决方案。我同意这有点复杂,但评论意图很明显。非常感谢你。 – unclemeat 2014-10-30 07:11:03

+1

这在这个特定的情况下工作,但它不能扩展。意思是,如果有4个值,则如果其中3个值为真,则此样式将返回true。 – Miller 2014-10-30 07:39:09

+0

是的,当我写这个时,我不知道我在想什么。 – 2014-10-30 11:52:17

相关问题