[perl] Perl에서 부울 변수를 어떻게 사용합니까?

나는 시도했다 :

$var = false;
$var = FALSE;
$var = False;

이 중 어느 것도 작동하지 않습니다. 오류 메시지가 나타납니다

"엄격한 하위"가 사용되는 동안 Bareword "false"는 허용되지 않습니다.



답변

Perl에서 다음은 조건부에서 false로 평가됩니다.

0
'0'
undef
''  # Empty scalar
()  # Empty list
('')

나머지는 사실입니다. true또는에 대한 축약어가 없습니다 false.


답변

내가 본 거짓에 대한 가장 완전하고 간결한 정의는 다음과 같습니다.

빈 문자열 또는 문자열로 문자열을 지정하는 0것은 모두 거짓입니다. 그 밖의 모든 것이 사실입니다.

따라서 다음 값은 false입니다.

  • 빈 문자열
  • 숫자 값 0
  • 정의되지 않은 값
  • 위 중 하나를 평가하는 오버로드 된 부울 연산자가있는 오브젝트입니다.
  • 가져 오기에서 위 중 하나로 평가되는 마법 변수입니다.

빈 목록 리터럴은 스칼라 컨텍스트에서 정의되지 않은 값으로 평가되므로 잘못된 것으로 평가됩니다.


“참 제로”에 대한 메모

0문자열 화하는 숫자 는 거짓 이지만 0으로 숫자 화되는 문자열은 반드시 그런 것은 아닙니다. 유일한 잘못된 문자열은 0빈 문자열입니다. 다른 문자열은 0으로 계산 되더라도 사실입니다.

다음은 부울로 true이고 숫자로 0 인 문자열입니다.

  • 경고없이 :
    • "0.0"
    • "0E0"
    • "00"
    • "+0"
    • "-0"
    • " 0"
    • "0\n"
    • ".0"
    • "0."
    • "0 but true"
    • "\t00"
    • "\n0e1"
    • "+0.e-9"
  • 경고와 함께 :
    • Scalar::Util::looks_like_numberfalse 를 반환 하는 모든 문자열 (예를 들어 "abc")

답변

Perl에는 기본 부울 유형이 없지만 동일한 동작을 얻기 위해 정수 또는 문자열 비교를 사용할 수 있습니다. Alan의 예는 정수 비교를 사용하여 좋은 방법입니다. 여기에 예가 있습니다

my $boolean = 0;
if ( $boolean ) {
    print "$boolean evaluates to true\n";
} else {
    print "$boolean evaluates to false\n";
}

내 프로그램 중 일부에서 한 가지 작업은 상수를 사용하여 동일한 동작을 추가합니다.

#!/usr/bin/perl

use strict;
use warnings;

use constant false => 0;
use constant true  => 1;

my $val1 = true;
my $val2 = false;

print $val1, " && ", $val2;
if ( $val1 && $val2 ) {
    print " evaluates to true.\n";
} else {
    print " evaluates to false.\n";
}

print $val1, " || ", $val2;
if ( $val1 || $val2 ) {
    print " evaluates to true.\n";
} else {
    print " evaluates to false.\n";
}

“상수 사용”으로 표시된 행은 항상 1로 평가되는 true라는 상수와 항상 0으로 평가되는 false라는 상수를 정의합니다. 상수가 Perl에 정의 된 방식으로 인해 다음 코드 행도 실패합니다.

true = 0;
true = false;

오류 메시지는 “스칼라 할당에서 상수를 수정할 수 없습니다”와 같은 내용이어야합니다.

나는 문자열 비교에 관해 당신이 한 의견에서 그것을 보았다. Perl은 스칼라 변수에서 문자열과 숫자 유형을 결합하므로 문자열과 숫자를 비교하기위한 구문이 다릅니다.

my $var1 = "5.0";
my $var2 = "5";

print "using operator eq\n";
if ( $var1 eq $var2 ) {
    print "$var1 and $var2 are equal!\n";
} else {
    print "$var1 and $var2 are not equal!\n";
}

print "using operator ==\n";
if ( $var1 == $var2 ) {
    print "$var1 and $var2 are equal!\n";
} else {
    print "$var1 and $var2 are not equal!\n";
}

이 연산자들의 차이점은 Perl에서 매우 일반적인 혼란의 원인입니다.


답변

나는 추천한다 use boolean;. cpan 에서 부울 모듈 을 설치해야합니다 .


답변

내 즐겨 찾기는 항상

use constant FALSE => 1==0;
use constant TRUE => not FALSE;

내부 표현과는 완전히 독립적입니다.


답변

나는 Perl에서 어떤 값이 참인지 거짓인지 잘 설명 하는 튜토리얼 을 보았습니다 . 상태는 다음과 같습니다.

다음 스칼라 값은 거짓으로 간주됩니다.

  • undef -정의되지 않은 값
  • 0 000 또는 0.0으로 쓰더라도 숫자 0
  • '' 빈 문자열
  • '0' 단일 0 자리를 포함하는 문자열

다음을 포함한 다른 모든 스칼라 값은 true입니다.

  • 1 0이 아닌 숫자
  • ' ' 공백이있는 문자열
  • '00' 문자열에서 둘 이상의 0 문자
  • "0\n" 0 다음에 줄 바꿈
  • 'true'
  • 'false' 예, 문자열 ‘false’조차도 true로 평가됩니다.

Perl true 및 false 에 대해 설명하는 또 다른 좋은 자습서가 있습니다.


답변

부울 값에 대해 bobf 가 제공하는 아름다운 설명 : True 또는 False? 빠른 참조 안내서

다른 가치에 대한 진실 테스트

                       Result of the expression when $var is:

Expression          | 1      | '0.0'  | a string | 0     | empty str | undef
--------------------+--------+--------+----------+-------+-----------+-------
if( $var )          | true   | true   | true     | false | false     | false
if( defined $var )  | true   | true   | true     | true  | true      | false
if( $var eq '' )    | false  | false  | false    | false | true      | true
if( $var == 0 )     | false  | true   | true     | true  | true      | true