Perl의 if 조건이 빈 문자열을 만족하는 이유는 무엇입니까?

Perl의 if 조건이 빈 문자열을 만족하는 이유는 무엇입니까?

아래 코드는 STDIN도 null 값을 취하고 첫 번째 선택된 섹션으로 이동한다는 점을 제외하면 잘 작동합니다 "print "Selected Y \n";". && $check ne "" ) {after를 사용하면 /^[Y]?$/i빈 STDIN 문제도 해결됩니다. 그러나 문제는 왜 거기에 null 값이 전달되는지입니다.

    my $check = 'NULL';
    while ( $check eq 'NULL' ) {
       print "Do you wish to continue? (Y/N)\n\n";
       print "Enter Selection: ";
       chomp ( $check = <STDIN> );
       if ( $check =~ /^[Y]?$/i ) { 
          print "Selected Y \n";
       }
       elsif ( $check =~ /^[N]$/i ) {
          print "Selected N \n";
       }
       else {
          print "\nInvalid input, please re-enter selection. (Y/N) \n\n";
          $check = 'NULL';
       }
   

저는 Perl을 처음 사용하는데, 이 동작을 이해하도록 도와줄 수 있는 사람이 있나요?

답변1

Perl 정규 표현식은 대소문자를 구분하지 않고 선택적 문자와 일치합니다 /^[Y]?$/i. Y효과는 1개 또는 0개의 문자 일치를 허용한다는 것 ?입니다 . 이는 전체 정규식도 빈 문자열과 일치함을 의미합니다.[Y][Y]

[Y]그냥 과 같습니다 Y. 를 사용하면 [Yy]대문자 또는 소문자와 일치합니다 y. 이 경우 /i대소문자를 구분하는 데 익숙하므로 , 또는 를 사용하여 /^Y$/i테스트하세요 .N/^N$/i/^[Nn]$/

올바른 입력 루프를 얻으려면 다음과 같이 하십시오.

while (1) {
        print 'Do you wish to continue (Y/N): ';
        my $reply = <STDIN>;

        if ($reply =~ /^Y/i) { last }
        if ($reply =~ /^N/i) { print "Bye!\n"; exit }

        print "Sorry, try again\n";
}

print "Continuing...\n"

이는 또는로 시작하고 대소문자를 구분하지 않는 n사용자 의 모든 응답을 허용합니다 .y

관련 정보