Как проверить, установлена ​​ли только одна переменная из трех

Я хотел бы ограничить пользователя вводом (через 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
}

... хотя я не уверен, что вы захотите с этим встречаться в коде.

Другие вопросы по тегам