如果语句带有标量条件

时间:2015-03-28 17:35:20

标签: perl

我很难理解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 ... }

1 个答案:

答案 0 :(得分:2)

Perl没有&#34;布尔值&#34;的独特概念。

the perldata manpage

  

标量值在布尔义上被解释为FALSE(如果未定义),空字符串或数字0(或其等效字符串,&#34; 0&#34;),如果是其他任何内容则为TRUE。布尔上下文只是一种特殊的标量上下文,不会转换为字符串或数字。

因此,在您的示例中,if $attempts表示if $attempts > 0

顺便说一句,这也意味着像$attempts > 0这样的东西不会评估为布尔值,因为没有这样的东西。相反,按>运算符1

  

[...]返回""表示true,以及特定版本的已定义空字符串"0 but true",该字符串计为零,但不受有关不正确数字转换的警告的影响,就像{{1是的。

(帽子提示到the perlop manpage指出他们返回的FALSE不是相当正常的空字符串。)