Perl的字符串不等于?

Perl的字符串不等于?,perl,Perl,我遇到了这段perl代码,$message是一个字符串,$pass被认为是一个布尔值。这将被检查为 my $pass = !$message; 我很困惑什么是不(!)的$message? 如何将其转换为布尔值 空字符串为False,非空字符串为True?代码是一元逻辑求反运算符。假字符串是”和“0”。如果这样的字符串在逻辑上被求反,则其计算结果为1。所有其他字符串都是true。它们的反义是”(空字符串)或数值0 其他假值为undef和数字0 因此,如果$message未定义、空字符串或零,则o

我遇到了这段perl代码,$message是一个字符串,$pass被认为是一个布尔值。这将被检查为

my $pass = !$message;
我很困惑什么是不(!)的$message?
如何将其转换为布尔值


空字符串为False,非空字符串为True?

代码是一元逻辑求反运算符。假字符串是
“0”
。如果这样的字符串在逻辑上被求反,则其计算结果为
1
。所有其他字符串都是true。它们的反义是
(空字符串)或数值
0

其他假值为
undef
和数字
0


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

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

ok ($pass, $test)

其他的都是真的。因此,如果
$message
不是空的、未定义的或
'0'
,那么
$message
是真的,并且
$消息
为假。

相关:除答案外,您还可以搜索“布尔上下文”
perldoc perldata
有一些关于它的信息…这可能与此无关,但是如果我执行$pass=$message,那么$pass是否保存$message的布尔值或实际字符串?从逻辑上讲,我猜它只会保存$message的文本,当执行ok($pass,$test)时,$pass将被视为布尔值,即如果不是空的话,则为true。@ealon您的理解是正确的。赋值运算符
=
复制(字符串的)值。如果要显式bool-ify任何值,请使用双重否定:
my$bool=$foo
0
''
'0'
undef