![Perl에는 한 번에 하나의 옵션만 있습니다.](https://linux55.com/image/32563/Perl%EC%97%90%EB%8A%94%20%ED%95%9C%20%EB%B2%88%EC%97%90%20%ED%95%98%EB%82%98%EC%9D%98%20%EC%98%B5%EC%85%98%EB%A7%8C%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
두 가지 옵션을 동시에 넣을 수 없다는 요구 사항이 있습니다.
예를 들어 -a
옵션을 사용하면 다음과 같습니다.
file.pl -a file.text # executes file
하지만 내가 쓴다면
file.pl -a -a file.text # it is supposed to print a msg
또는
file.pl -a -b file.text # it is supposed to print a msg
아래는 내 스크립트입니다.
if ($ARGV[1] eq "-a" or "-b" or "-c" ) {
print "error \n"; }
문제는 그냥 써도 file.pl -a file.text
여전히 메시지가 인쇄된다는 것입니다.
답변1
이것은 논리 연산자가 작동하는 방식이 아닙니다. 전체 표현식을 반복해야 합니다.
if ($ARGV[1] eq '-a' or $ARGV[1] eq '-b' or $ARGV[1] eq '-c') {
print "Error\n";
}
ARGV 부분을 반복하지 않으려면 다음을 사용할 수 있습니다 grep
.
if (grep $_ eq $ARGV[1], qw(-a -b -c)) {
그러나 실제로는 두 번째 매개변수의 첫 번째 문자에 관심이 많으므로 이 방법도 작동합니다.
if (0 == index $ARGV[1], '-') {
무엇에 대해 $ARGV[2]
?