print !$num;
當$ num是1時,我希望看到0.但是,沒有任何打印。爲什麼?謝謝你的評論。
以下是我嘗試過的一些測試。這與我的問題一致。
print 1; # 1
print 0; # 0
print !1; # (nothing)
print !0; # 1
print !1 == 0; # 1
邁克爾
print !$num;
當$ num是1時,我希望看到0.但是,沒有任何打印。爲什麼?謝謝你的評論。
以下是我嘗試過的一些測試。這與我的問題一致。
print 1; # 1
print 0; # 0
print !1; # (nothing)
print !0; # 1
print !1 == 0; # 1
邁克爾
的「 」假布爾在Perl是特殊的值,當評價爲字符串被視爲""
,但在一個數值範圍內,它被當作0
。
這就是爲什麼印刷否定真正價值的時候,你看到的空字符串:
$ perl -MData::Dump -e 'dd !1'
""
要看到價值0
,必須在數字環境中使用它。您可以通過簡單地添加0的值做到這一點:
$ perl -MData::Dump -e 'dd 0 + !1'
0
有關布爾更多信息,請perldata - Scalar Values。
Re「Perl中默認的」false「布爾值是空字符串''''」。並非如此。這是一個包含'0'和空字符串的雙重變量。 'perl -wE'say 0+!1;說0 +「」''只會警告後者的說法。 – ikegami 2014-09-24 19:11:38
是的,我知道這在技術上是正確的。但是,我不確定如何以初學者的語言來構建。我會考慮並回來,或隨意給我一個手。 – Miller 2014-09-24 19:17:14
我認爲最後的[答案](http://stackoverflow.com/a/1140031/176646)到了愚蠢的目標解釋得很好,雖然它有點長。特別是最後一部分:「總之,你沒有得到任何東西,你沒有得到一個空字符串,並且你沒有得到零。你得到一個變量,它既是空字符串也是0同時。「 – ThisSuitIsBlackNot 2014-09-24 19:19:53
按照docs,
數字0,字符串 '0' 和 「」,空列表(),和民主基金 是在布爾上下文全是假的。其他所有值都是正確的。 否定了真正的價值!或者不返回一個特殊的錯誤值。 以字符串形式進行評估時,它被視爲「」,但是作爲數字,它會被視爲0。大多數返回true或false的Perl運算符都以這種方式運行 。
print
正在評估!1
作爲字符串,所以它被視爲""
。
如果您在數值上下文評估!1
,它將被視爲0
。
$ perl -MData::Dumper -e'print Dumper !1+!1'
$VAR1 = 0;
在一般意義上,有一個品種,是true
值和多種是false
值。所以not true
在布爾上下文中是有效的,但是當你print
它是不明確的。
'print 0 +!$ num;' – Slade 2014-09-24 19:06:05