0
my $pass = !$message;

我遇到了这个 perl 代码,其中 $message 是一个字符串,而 $pass 应该是一个布尔值。将被检查为

ok ($pass, $test)

我很困惑 $message 的非(!)是什么?
这如何转换为布尔值?

空字符串为假,非空字符串为真?

4

2 回答 2

6

!一元逻辑否定运算符。假字符串是""and "0"。如果这样的字符串在逻辑上被否定,则计算结果为1。所有其他字符串都是真实的。这些的否定是""(空字符串)或数字0

其他假值是undef和数字0

因此,ok ($pass, $test)如果$message未定义、空字符串或零,则将通过。

于 2013-07-31T17:29:32.427 回答
5

这是完全正确的。在 perl 中,以下项目为“假”:

0
''
'0'
undef

其他任何事情都是真的。因此,如果$message不是空、未定义或'0'$message则为真,!$message为假。

于 2013-07-31T17:29:57.030 回答