为什么Perl认为`1和0'是真的?

bes*_*bov 6 perl boolean

这是样本.出于一些奇怪的原因,Perl认为这1 and 0是一个真正的价值.为什么?

$ perl -e '$x = 1 and 0; print $x;'
1
Run Code Online (Sandbox Code Playgroud)

nan*_*dhp 12

因为优先级and&&不同:

$x = 1 and 0就像($x = 1) and 0,而是$x = 1 && 0喜欢$x = (1 && 0).

perlop(1).

  • 特别是,赋值运算符(`=`)的优先级低于`&&`,但优先级高于`和`. (6认同)

Сух*_*й27 11

您的示例中的运算符优先级是

perl -e '($x = 1) and 0; print $x;'
Run Code Online (Sandbox Code Playgroud)

而你想要的是:

perl -e '$x = (1 and 0); print $x;'
Run Code Online (Sandbox Code Playgroud)

要么

perl -e '$x = 1 && 0; print $x;'
Run Code Online (Sandbox Code Playgroud)


Bor*_*din 6

它没有:

$ perl -e '$x = (1 and 0); print $x;'
0
Run Code Online (Sandbox Code Playgroud)