Как проверить, установлена ли только одна переменная из трех
Я хотел бы ограничить пользователя вводом (через GetOpt::Long) только одного значения из трех возможных. Значения: "pc-номер", "ip-адрес" и "фамилия".
Когда было два значения, я делал следующее:
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 ответа
Решение
Подсчитайте количество истинных значений, используя 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) {
...;
Это, кажется, делает это:
if (($x xor $y xor $z) and not $x && $y && $z) {
... # one (and only one) is true
}
... хотя я не уверен, что вы захотите с этим встречаться в коде.