逻辑运算符的奇怪perl问题

时间:2016-04-26 20:57:18

标签: perl

我在mac上做这个,perl版本是

This is perl 5, version 16, subversion 3 (v5.16.3) built for darwin-thread-multi-2level

$ perl -e "$t=false;while(!($t)){print 1}"
$ perl -e "$t=true;while(!($t)){print 1}"
$ perl -e "$t=true;while(not($t)){print 1}"
$ perl -e "$t=false;while(not($t)){print 1}"
$

为什么会这样?我错过了什么?

1 个答案:

答案 0 :(得分:4)

来自perlsyn

  

真相与虚假

     

数字0,字符串'0'和“”,空列表()undef在布尔上下文中都是假的。所有其他值都是真的。 !not对真值的否定会返回一个特殊的假值。

禁用$t=false时,

$tfalse设置为字符串strict 'subs'。当在布尔上下文中使用时,字符串false是真实的。

因此:

$t=false # truthy
!$t      # falsy
$t=true  # truthy
!$t      # falsy

Perl没有关于true和false的特殊关键字;通常使用1表示true,0表示false表示。