真假

Perl 沒有布林資料型別,也沒有像許多其他語言一樣的任何 true 和 false 關鍵字。但是,在布林上下文中計算時,每個標量值都將計算為 true 或 false(例如,if 語句或 while 迴圈中的條件)。

以下值被視為 false:

  • '',空字串。這就是內建的比較運算子返回的內容(例如 0 == 1)
  • 0,數字 0,即使你把它寫成 000 或 0.0
  • '0',包含單個 0 位的字串
  • undef,未定義的值
  • 使用過載來將數字/字串化為偽值的物件,例如 JSON::false

所有其他值都是真的:

  • 任何非零數字,如 1,3.14, 'NaN'或'Inf'
  • 任何字串,數字為 0 但字面上不是字串'0',例如'00','0e0',0\n 和 abc。
    如果你故意返回一個真正的數字 0 值,更喜歡'0E0'(由眾所周知的模組使用)或'0 but true'(由 Perl 函式使用)
  • 任何其他非空的字串,例如' ','false'
  • 所有引用,即使它們引用了假值,例如\'',[] 或 {}
  • 假值的陣列或雜湊

通常將以下運算子視為在標量上下文中返回布林值:

  • @a 返回陣列是否為空

  • %h 返回雜湊是否為空

  • grep 返回是否找到任何匹配的專案

  • @a = LIST 和 (LIST) = LIST 返回右側 LIST 是否產生任何標量