Perl에는 한 번에 하나의 옵션만 있습니다.

Perl에는 한 번에 하나의 옵션만 있습니다.

두 가지 옵션을 동시에 넣을 수 없다는 요구 사항이 있습니다.

예를 들어 -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]?

관련 정보