只是让我很困惑。
相关但不同的问题: Perl 中“0 但为真”是什么意思?
Perl 不区分数字的种类。看看所有那些非 CS/程序员眼光的人,他们对我来说都意味着同样的事情:零。(这是 Perl 的基础之一:它试图像人一样工作,而不是像计算机一样工作。“如果它看起来像一只鸭子......”)
因此,如果您将它们用作数字,它们都是一样的。如果将它们用作字符串,它们会有所不同。这确实会导致您可能需要强制一种解释的情况(“0 但为真”;另请参见“nancy typing”)。但总的来说,它会自动“做正确的事”。
没看懂,还有什么意思?
你给出整数、科学、浮点、有符号整数和零的八进制表示法。为什么它们应该不同?
0==0
每个人,包括拉里沃尔,都知道。
Perl 将每个标量值都解释为字符串和(可能)数字。根据 perl 的转换规则,所有这些零的字符串表示形式都可以转换为整数值 0 :
“0”、“0.0”、“-0”、“+0”、“000” => 直接字符串到数字转换的最简单情况。"0e0" => 在数字上下文中,仅转换前导的有效数字字符,因此仅使用前导的 "0"。例如,“1984abcdef2112”将在数字上解释为 1984。
perl 中的“0 但为真”意味着像“0e0”这样的字符串将以数字方式计算为 0,但在布尔上下文中将为“真”,因为到布尔值的转换遵循与严格数字转换不同的规则。
Perl 在上下文中工作。在字符串上下文中,它们都是不同的。在数字上下文中,它们都为零。
print "same string\n" if '0' eq '0.0';
print "same number\n" if 0 == 0.0;
布尔上下文中的“0 但为真”为真:
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;