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