【问题标题】:Perl comparison operator outputPerl 比较运算符输出
【发布时间】:2017-09-10 22:23:55
【问题描述】:

我不确定比较的输出是什么。例如,考虑

$rr = 1>2;
$qq = 2>1;

print $rr; #nothing printed
print $qq; #1 printed

$rr 是空字符串吗?这种行为是否记录在某处?或者如何确定?

我在 Schwartz 等人的 Learning Perl 中寻找答案,但无法立即解决。

【问题讨论】:

  • 像您的示例这样比较的结果/值是布尔值,通常您直接在例如一个if(...) 来控制程序流程。您也可以将结果存储在标量变量中,就像您所做的那样,然后执行if($rr)。打印布尔值是最易读的if($rr) {print "True"} else {print "False"}。请提供更多关于您想要实现的目标的背景信息。
  • @Yunnosch 感谢您的评论。但是,它并没有真正回答我关于标量变量包含什么的问题。如您所知,Perl 中没有“布尔”类型。众所周知,许多数字和字符串的计算结果为假,但有人知道 $rr 中究竟存储了什么吗?它是否依赖于实现?
  • 我知道 Perl 中没有布尔类型,也不想这么说。诚然,我的“Printing boolean ...”可以这样阅读,但 if 是“可视化此类布尔结果 ...”的缩写。 “比较的输出”仍然是布尔值,即布尔逻辑的一部分。它们按照良好答案中的描述存储的事实是我在这里学到的。我评论而不是回答,因为我很清楚,我不能回答具体的“它是如何存储的”问题。感谢您的提问。

标签: perl


【解决方案1】:

http://perldoc.perl.org/perlop.html#Relational-Operators:

返回 true 或 false 的 Perl 运算符通常返回可以安全地用作数字的值。例如,本节中的关系运算符和下一节中的等式运算符返回 1 表示 true 和定义的空字符串的特殊版本 "" ,它被视为零,但不会受到有关不正确数字转换的警告,只是就像“0 但真实”一样。

所以返回的是字符串上下文中的空字符串,数字上下文中为 0。

【讨论】:

  • 嗯...它似乎总是空字符串,即使在数字上下文中,不是吗?除非我误解了数字上下文的含义,否则在我的示例中,所有内容都是数字,但它仍然返回空字符串(没有打印任何内容)。
  • @bilodeau1 在您的代码中,您对$rr 所做的唯一事情就是将其传递给print,后者将其用作字符串。这里没有数字上下文。
  • melpomene,谢谢。更仔细地阅读 perldoc,我现在明白了 ysth 的意思。返回的内容既不是真正的空字符串或 0,而是一个特殊的“双重”字符,其作用类似于空字符串或 0,具体取决于“适当”的内容。我验证了 $rr+1 没有发出警告。
  • @bilodeau1,比较perl -we'my $x = "" + 0;'perl -we'my $x = (1<0) + 0;',你会发现它不仅仅是一个空字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 2021-01-13
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多