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