布尔值判断

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"}