布尔值判断
Perl没有专门提供布尔类型,它使用一些特殊的值代表布尔假,除了代表布尔假的值,其他值都代表布尔真。
代表布尔假的值包括:undef、0、空字符串。但注意:
- Perl数值还包括可转换为数值的字符串,所以字符串
"0"
也是布尔假,且是唯一非空字符串为假的特例 - 由于布尔判断操作处于标量上下文,这使得列表、数组、hash会转换成标量,然后判断是否是布尔假
- 列表和数组转换为标量时,转换结果为长度
- hash转换为标量时:空hash转换为数值0,非空hash转换为
M/N
格式的字符串
因此,总结以下代表布尔假的值:
- 数值0、0.0
- 空字符串
''
、字符串"0"
- undef
- 空列表,包括
() ((())) ((),())
- 空数组
- 空hash
除以上代表布尔假的值之外,其余都是布尔真。
一定要注意的是,Perl没有直接代表布尔值的false值和true值。甚至,直接使用false或true有可能会被当作Bareword字符串,从而被误认为布尔真。
# 这里的false被当作bareword字符串
# 关闭strict模式,下面会输出hello
if(false){say "hello"}