Perl 沒有特定的布林值,但在 Perl 的文件中你經常會看到函數回傳「布林」值。 有時候這文件會說函式回傳真值或是假值。
哪個才是對的?
Perl 確實沒有特定的布林型別,但凡純量皆是 — 如果用 if 來確認,非真值即假值。所以你可以寫
if ($x eq "foo") {
}
你也可以寫
if ($x) {
}
前者會確認 $x 變數的內容是否和 "foo" 字串一致 後者則會確認 $x 本身是真值或否。
哪些值在 Perl 裡是真值,哪些是假值?
這相當簡單。讓我引述一下文件:
數字 0,字串 '0',和 '',空串列 (),和 undef 在布林語境都是假值。其他值都是真值。 用 ! 和 not 來否定一個真值會回傳一個特別的假值。 當被估算為字串時它被當作 '',估算為數字時,,被當作 0。 引自 perlsyn 的 "Truth and Falsehood" 一節。
所以下列純量被認為是假值。
- undef — 未定義值
- 0 — 數字 0,無論你寫成 000 或是 0.0
- '' — 空字串
- '0' — 只包含一個羅馬數字 0 的字串
所有其他純量,包含下列,都是真值:
- 1 和任何非零數
- ' ' — 包含一個空白的字串
- '00' — 兩個或許多數字零組成的字串
- "0\n" — 一個數字零接上一個換行字元
- 'true'
- 'false' — 是的,即使字串 'false' 也是真值
我想這是因為 Perl 之父,Larry Wall, 有相當正向的世界觀。 他也許覺得世界上只有很少事情是很糟糕錯誤的。 大部分事情都是對的。