수색…


통사론

  • undef # False
  • ''# 정의 됨, 거짓
  • 0 # 정의 됨, 길이 있음, 거짓
  • '0'# 정의 됨, 길이 있음, 거짓

비고

Perl에는 부울 데이터 유형이 없으며 다른 많은 언어와 마찬가지로 truefalse 키워드가 없습니다. 그러나 부울 컨텍스트 (if 문 또는 while 루프의 조건)에서 평가할 때 모든 스칼라 값은 true 또는 false로 평가됩니다.

다음 값은 false로 간주됩니다.

  • '' , 빈 문자열. 이것은 내장 비교 연산자가 반환하는 것입니다 (예 : 0 == 1 ).
  • 0 , 000 또는 0.0으로 쓰더라도 0입니다.
  • '0' , 단일의 0의 숫자를 포함한 캐릭터 라인
  • undef , 정의되지 않은 값
  • 오버로드 를 사용하여 JSON::false 와 같이 거짓 값으로 음수화 / 문자열화하는 객체

다른 모든 값은 true입니다.

  • 1 , 3.14 , 'NaN' 또는 'Inf' 와 같은 0이 아닌 숫자.
  • 수치 적으로 0이지만 문자 그대로 '00' , '0e0' , "0\n""abc" '0' 와 같은 문자열 '0' 아닌 문자열.
    의도적 으로 실제 0 값을 반환하는 경우 잘 알려진 모듈에서 사용되는 '0E0' 또는 Perl 함수에서 사용되는 '0 but true' 선호합니다.
  • ' ' , 'false' 와 같이 비어 있지 않은 다른 문자열
  • 모든 참조는 \'' , [] 또는 {} 와 같은 거짓 값을 참조하더라도
  • false 치의 배열 또는 해시

다음 연산자는 일반적으로 스칼라 컨텍스트에서 부울을 반환하도록 처리됩니다.

  • @a 배열이 비어 있는지 여부를 반환합니다.

  • %h 는 해시가 비어 있는지 여부를 반환합니다.

  • grep 은 일치하는 항목이 있는지 없는지를 반환합니다.

  • @a = LIST(LIST) = LIST 오른쪽에 LIST가 스칼라를 생성했는지 여부를 반환합니다.

true 및 false 값 목록

use feature qw( say );

# Numbers are true if they're not equal to 0.
say 0             ? 'true' : 'false'; # false
say 1             ? 'true' : 'false'; # true
say 2             ? 'true' : 'false'; # true
say -1            ? 'true' : 'false'; # true
say 1-1           ? 'true' : 'false'; # false
say 0e7           ? 'true' : 'false'; # false
say -0.00         ? 'true' : 'false'; # false

# Strings are true if they're not empty.
say 'a'           ? 'true' : 'false'; # true
say 'false'       ? 'true' : 'false'; # true
say ''            ? 'true' : 'false'; # false

# Even if a string would be treated as 0 in numeric context, it's true if nonempty.
# The only exception is the string "0", which is false.
# To force numeric context add 0 to the string
say '0'           ? 'true' : 'false'; # false
say '0.0'         ? 'true' : 'false'; # true
say '0e0'         ? 'true' : 'false'; # true
say '0 but true'  ? 'true' : 'false'; # true
say '0 whargarbl' ? 'true' : 'false'; # true
say 0+'0 argarbl' ? 'true' : 'false'; # false

# Things that become numbers in scalar context are treated as numbers.
my @c = ();
my @d = (0);
say @c            ? 'true' : 'false'; # false
say @d            ? 'true' : 'false'; # true

# Anything undefined is false.
say undef         ? 'true' : 'false'; # false

# References are always true, even if they point at something false
my @c = ();
my $d = 0;
say \@c            ? 'true' : 'false'; # true
say \$d            ? 'true' : 'false'; # true
say \0             ? 'true' : 'false'; # true
say \''            ? 'true' : 'false'; # true


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow