2013-07-31 45 views
0
my $pass = !$message; 

我遇到了这个perl代码,其中$ message是一个字符串,$ pass被假设为一个布尔值。这将被检查为不是字符串的Perl等于?

ok ($pass, $test) 

我很困惑什么是不是($)的消息?
这是如何转换为布尔值?

空字符串为False且非空字符串为真?

+1

相关:http://stackoverflow.com/questions/1134962/why-does-1-give-me-nothing-in-perl – geoffspear

+0

除了答案你可以搜索“布尔上下文”。 'perldoc perldata'有一些关于它的信息... – user1146332

回答

6

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

其他错误值是undef和数字0

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

+0

这可能是不相关的,但是如果我做$ pass = $ message然后$ pass保存$ message的布尔值或实际的字符串?从逻辑上讲,我猜测它只会保存$ message的文本,当确定($ pass,$ test)执行时,$ pass将被视为布尔值,即如果不为空则为真。 – ealeon

+1

@ealeon你的理解是正确的。赋值运算符'='复制(字符串的)值。如果你想明确地bool-ify任何值,使用双重否定:'my $ bool = !! $ foo'。 – amon

5

完全正确。在Perl中,以下项目是'假':

0 
'' 
'0' 
undef 

其他任何内容都是正确的。因此,如果$message不为空,未定义或'0',则$message为真,且!$message为假。