【发布时间】:2011-07-22 09:22:43
【问题描述】:
只是让我感到困惑。
相关但不同的问题: What does “0 but true” mean in Perl?
【问题讨论】:
-
9-9、-7+2+5、100*0 和 10%5 的含义也与本文主题相同!写零的方法有无数种......
标签: perl distinct-values
只是让我感到困惑。
相关但不同的问题: What does “0 but true” mean in Perl?
【问题讨论】:
标签: perl distinct-values
Perl 在上下文中工作。在字符串上下文中,它们都是不同的。在数字上下文中,它们都为零。
print "same string\n" if '0' eq '0.0';
print "same number\n" if 0 == 0.0;
'0 but true' 在布尔上下文中为真:
print "boolean context\n" if '0 but true';
print "string context\n" if '0 but true' eq '0';
print "numeric context\n" if '0 but true' == 0;
【讨论】:
0==0 所有人都知道,包括拉里·沃尔 (Larry Wall)。
【讨论】:
Perl 将每个标量值都解释为字符串和(可能)数字。根据 perl 的转换规则,所有这些零的字符串表示形式都可以转换为整数值 0 :
"0", "0.0", "-0", "+0", "000" => 直接字符串到数字转换的最简单情况。 "0e0" => 在数字上下文中,仅转换前导的有效数字字符,因此仅使用前导的 "0"。例如,“1984abcdef2112”将在数字上解释为 1984。
perl 中的“0 但为真”意味着像“0e0”这样的字符串将在数值上计算为 0,但在布尔上下文中将是“真”,因为到布尔值的转换遵循与严格的数字转换不同的规则。
【讨论】:
Perl 不区分数字的种类。看看所有那些非 CS/程序员眼光的人,他们对我来说也都意味着同样的事情:零。 (这是 Perl 的基础之一:它试图像人一样工作,而不是像计算机一样工作。“如果它看起来像鸭子......”)
因此,如果您将它们用作数字,它们都是一样的。如果将它们用作字符串,它们会有所不同。这确实会导致您可能需要强制一种解释(“0 但为真”;另请参阅"nancy typing")。但总的来说,它会自动“做正确的事”。
【讨论】:
execute 表明即使没有行受到影响也没有发生错误。
我不明白,它们还有什么意思?
你给出整数、科学、浮点、有符号整数和零的八进制表示法。为什么它们应该不同?
【讨论】:
perl -E 'say "$_\t" . ($_ ? "true" : "false") for qw( 0 0e0 0.0 -0 +0 000)' 轻松验证