Perl에는 특별한 불리언 타입은 없습니다. 그런데도, Perl 문서에서 어떤 함수가 "불리언" 값을 반환한다고 나온 것을 종종 볼 수 있습니다. 때로는 함수가 참 또는 거짓을 반환한다고도 합니다.

뭐가 진실일까요?

Perl에는 특정한 불리안 타입은 따로 없습니다만, 모든 스칼라 값들은 if를 써서 검사할 때 참 또는 거짓이 됩니다. 따라서 다음과 같이 쓸 수도 있지만

if ($x eq "foo") {
}

다음과 같이 쓸 수도 있습니다.

if ($x) {
}

첫번째 코드는 $x 변수의 내용이 문자열 "foo"와 동일한지를 검사하는 반면, 두번째 코드는 $x 자체가 참인지 거짓인지를 검사합니다.

어떤 값이 참이고 어떤 값이 거짓인가?

이것은 매우 쉽습니다. 문서를 인용하도록 하겠습니다:

수 0, 문자열 '0'과 '', 빈 리스트 "()", 그리고 "undef"은 불리언 컨텍스트에서는 모두
거짓이다. 그 외의 모든 값들은 다 참이다. 참인 값에 "!" 또는 "not"을 붙여 부정하면
특별한 거짓 값을 반환하는데, 이 값은 문자열로서 처리될 때는 ''와 같이 처리되고, 수로
처리될 때는 0으로 처리된다.

perlsyn 문서의 "Truth and Falsehood" 중에서.

따라서 다음 스칼라 값들은 거짓으로 간주됩니다:

  • undef - 정의되지 않은 값
  • 0 수 0, 000이나 0.0으로 써도 마찬가지
  • '' 빈 문자열.
  • '0' 숫자 0 한 개가 들어 있는 문자열.

다음을 포함하여 다른 모든 스칼라값들은 참입니다:

  • 1 0이 아닌 수
  • ' ' 스페이스가 들어 있는 문자열
  • '00' 숫자 0이 두 개 이상 들어 있는 문자열
  • "0\n" 0 뒤에 개행 문자가 붙어 있는 문자열
  • 'true'
  • 'false' 그렇습니다, 'false'라는 문자열 역시 참입니다.

제 생각에는 이것은 Perl을 만든 Larry Wall이 긍정적 세계관을 가졌기 때문이 아닐까 합니다. 그는 아마도 세상에 존재하는 것들 중 나쁘고 거짓인 건 극소수라고 생각하고 있을지 모릅니다. 대부분은 참된 것들이고요.