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

unc*_*eat 1 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)
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能简单地确保用户只设置了三个变量中的一个?

Mil*_*ler 5

使用 计算真值的数量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) {
    ...;
Run Code Online (Sandbox Code Playgroud)