2014-10-30 2 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

2

이 그것을 할 것으로 보인다 :

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

을 ... 나는 그것이 당신이 관리해야 코드에서 발생 싶어 물건의 종류의 잘 모르겠어요하지만.

+0

이것은 좋은 해결책입니다. 나는 그것이 다소 복잡하다는 것에 동의하지만, 의견은 그 의도를 아주 분명하게 만든다. 고맙습니다. – unclemeat

+1

이 특정 경우에는 작동하지만 확장 할 수는 없습니다. 의미, 4 개의 값이있는 경우이 스타일은 3 개가 참이면 true를 반환합니다. – Miller

+0

그래, 내가 이것을 썼을 때 내가 무슨 생각을했는지 모르겠다. –

관련 문제