我很难理解Perl
中的以下表达式。
for (my $attempts = 0; $attempts < $maxatt; $attempts++) {
print "Please try again.\n" if $attempts;
print "$prompt: ";
$response = readline(*STDIN);
chomp($response);
return $response if $response;
}
将标量用作条件是什么意思?即是什么让它回归真实与虚假?我假设语句为if ($attempts) { print ... }
。
答案 0 :(得分:2)
Perl没有&#34;布尔值&#34;的独特概念。
标量值在布尔义上被解释为FALSE(如果未定义),空字符串或数字0(或其等效字符串,&#34; 0&#34;),如果是其他任何内容则为TRUE。布尔上下文只是一种特殊的标量上下文,不会转换为字符串或数字。
因此,在您的示例中,if $attempts
表示if $attempts > 0
。
顺便说一句,这也意味着像$attempts > 0
这样的东西不会评估为布尔值,因为没有这样的东西。相反,按>
运算符1
:
[...]返回
""
表示true,以及特定版本的已定义空字符串"0 but true"
,该字符串计为零,但不受有关不正确数字转换的警告的影响,就像{{1是的。
(帽子提示到the perlop
manpage指出他们返回的FALSE不是相当正常的空字符串。)