真假
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 是否產生任何標量