나는 시도했다 :
$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_number
false 를 반환 하는 모든 문자열 (예를 들어"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