두 가지 옵션을 동시에 넣을 수 없다는 요구 사항이 있습니다.
예를 들어 -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]
?