【问题标题】:0, 0e0, 0.0, -0, +0, 000 all mean the same thing to Perl, why?0, 0e0, 0.0, -0, +0, 000 对 Perl 来说都是一样的,为什么?
【发布时间】: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


【解决方案1】:

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;

【讨论】:

    【解决方案2】:

    0==0 所有人都知道,包括拉里·沃尔 (Larry Wall)。

    【讨论】:

      【解决方案3】:

      Perl 将每个标量值都解释为字符串和(可能)数字。根据 perl 的转换规则,所有这些零的字符串表示形式都可以转换为整数值 0 :

      "0", "0.0", "-0", "+0", "000" => 直接字符串到数字转换的最简单情况。 "0e0" => 在数字上下文中,仅转换前导的有效数字字符,因此仅使用前导的 "0"。例如,“1984abcdef2112”将在数字上解释为 1984。

      perl 中的“0 但为真”意味着像“0e0”这样的字符串将在数值上计算为 0,但在布尔上下文中将是“真”,因为到布尔值的转换遵循与严格的数字转换不同的规则。

      【讨论】:

      • 0e0 实际上是科学记数法。 5e3 是 5,000。因此,您可以使用 0e9999999 或在 e 之后浮动您的船的任何内容。
      【解决方案4】:

      Perl 不区分数字的种类。看看所有那些非 CS/程序员眼光的人,他们对我来说也都意味着同样的事情:零。 (这是 Perl 的基础之一:它试图像人一样工作,而不是像计算机一样工作。“如果它看起来像鸭子......”)

      因此,如果您将它们用作数字,它们都是一样的。如果将它们用作字符串,它们会有所不同。这确实会导致您可能需要强制一种解释(“0 但为真”;另请参阅"nancy typing")。但总的来说,它会自动“做正确的事”。

      【讨论】:

      • @geekosaur:如果它知道正确的做法,或者在这种情况下说......为什么它告诉我“找到了 0e0 行”。
      • 这看起来像是一个数据库模块在做“0 但真实”的事情(请参阅该问题的 cmets)。或者,它直接来自数据库管理器,但这很奇怪。你能展示一些上下文吗?
      • 看起来 DBI 确实在做 0-but-true。 encrypted.google.com/… 引起了相当多的讨论。
      • @blunders,字符串 '0E0' 是真的,但是如果你把它当作一个数字,它就等于零。它允许execute 表明即使没有行受到影响也没有发生错误。
      【解决方案5】:

      我不明白,它们还有什么意思?

      你给出整数、科学、浮点、有符号整数和零的八进制表示法。为什么它们应该不同?

      【讨论】:

      • +1 @musiKk:所以 Perl 认为它们不仅仅是零,还是你呢?问题是为什么 Perl 不将它们视为零类型,我猜。感谢打破差异,因为即使这对我来说也不清楚。
      • 没有零的“类型”。只有零,它在 perl 中表示 false。一个例外:“0 但为真”。就这些
      • @mugen kenichi:你的例外情况被颠倒了。例外是字符串“0”,它是假的(“”、undef 和 0(数字,而不是字符串)也是如此)。其他所有内容都是正确的,可以通过perl -E 'say "$_\t" . ($_ ? "true" : "false") for qw( 0 0e0 0.0 -0 +0 000)' 轻松验证
      • 确实..我打了自己好几次。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 2013-10-22
      相关资源
      最近更新 更多