“如果(1)”做什么?

时间:2013-07-08 15:45:25

标签: perl

语法是什么

if (1) {}

办?

我找不到这种语法的文档,1没有被视为布尔值。我对吗?。

9 个答案:

答案 0 :(得分:19)

从技术上讲,if (1)没有任何意义,因为它是一个始终执行的if语句。

if (1)的一个常见用途是包装您希望能够快速禁用的代码,比如用于调试目的。您可以快速将if (1)更改为if (0)以停用代码。

答案 1 :(得分:7)

是,1被视为真,因此始终执行if (1)之后的块。

来自perldoc

  

数字0,字符串'0'和“”,空列表()和undef在布尔上下文中都是false。所有其他值都是真的。

答案 2 :(得分:4)

在这种情况下,

1确实被视为布尔值,它总是计算为true

这基本上是if语句,始终传递(首先使其不必要)。

答案 3 :(得分:2)

如有疑问,请使用Deparse

$ perl -MO=Deparse -e'if (1) {}'
do {
    ()
};
-e syntax OK

答案 4 :(得分:1)

它运行代码块。它相当于:

{
  ...
}

由ikegami添加:

不,不是。

{ ... }是一个“裸循环”,一个只执行一次的循环。它受nextlastredo的影响。

if (1) { ... }不是循环。它不受nextlastredo的影响。

>perl -E"for (1..3) { say $_; if (1) { next; } say $_; }"
1
2
3

>perl -E"for (1..3) { say $_; { next; } say $_; }"
1
1
2
2
3
3

然而,它们的相似之处在于它们都创造了一个词汇范围。

答案 5 :(得分:1)

由于if未评估为false,因此将1 视为布尔值true。见How do I use boolean variables in Perl?

答案 6 :(得分:1)

在Perl中,如果布尔语句返回值0,则返回false,否则返回true。数值返回其值。

在该语句中,用户强制if语句的值为true:

if (1) {
    print "This statement is always true\n";
}

当然还有:

if (0) {
    print "This statement is false, and you'll never see this printed\n";
}

用户也可以写这样的东西:

if ( 1 == 1 ) {
    print "This statement is always true\n"
}

您通常不会在if声明中看到这一点。如果条件总是如此,为什么还要费心if?但是,如果您需要无限循环while语句很常见:

while (1) {
    print "Keep doing this over, and over again\n";
}

通常,有一个逃避条款:

my $count = 0
while (1) {
    $count = $count + 1;
    print "The Count is now $count\n";
    last if $total > 100;
}

我认为有人想要这样做的唯一原因是某种调试检查。也就是说,大多数情况下语句都是false,但如果设置为true,则打印出某种调试语句:

if (0) {    #Change from "0" to "1" to debug
    print "DEBUG: The value of foo = $foo\n";
}

然而,有更好的方法来处理这样的事情,例如通过常量:

use constant {
    DEBUG => 0,
};

if (DEBUG) {
    print "DEBUG: The value of foo = $foo\n";
}

或通过调试子程序。

答案 7 :(得分:0)

perl中,以下值被视为false

0
Empty String

其他所有内容都被视为true

因此,if (1)被视为始终为true

答案 8 :(得分:0)

if(1)确实每次都返回true,除了定义范围之外什么都不做,类似于代码块

相关问题