나는 시도했다 :
$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-정의되지 않은 값
- 0000 또는 0.0으로 쓰더라도 숫자 0
- ''빈 문자열
- '0'단일 0 자리를 포함하는 문자열
다음을 포함한 다른 모든 스칼라 값은 true입니다.
- 10이 아닌 숫자
- ' '공백이있는 문자열
- '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