for(;;)(2个半冒号)循环是什么意思?

时间:2014-04-13 18:37:59

标签: perl freeswitch

我正在研究VoIP软件的脚本Freeswitch。该脚本将作为侦听插槽的入站消息的实例运行。

我使用Freeswitch提供的示例脚本,开始时,一切正常。

然而,有一点让我失望。

use IO::Socket::INET;
use warnings;
use strict;


my $sock = new IO::Socket::INET ( LocalHost => '127.0.0.1',  LocalPort => '8060',  Proto => 'tcp',  Listen => 1,  Reuse => 1 );
die "Could not create socket: $!\n" unless $sock;


for(;;) {
    my $new_sock = $sock->accept();
    my $pid = fork();
    if ($pid) {
      close($new_sock);
      next;
    } 
    close($new_sock); 
}

;;究竟是什么意思?它是在创建套接字时定义的特殊运算符吗?苦苦寻找文件!

3 个答案:

答案 0 :(得分:8)

for(;;)是一个C-ish习语,读作for ever,是一个永不终止的循环。不是来自C的人会改为写while (1)

通常,这个C风格的for循环有三个语句:初始化,循环条件和一些步骤:

for (init; condition; step) {
    body;
}

完全等同于

{
    init;
    while (condition) {
        body;
    }
    continue {
        step;
    }
}

condition始终为真。

常见的用法是迭代范围内的所有数字:

for (my $i = 0; $i < @array; $i++) {
    say $array[$i];
}

但是,这将使用foreach循环更加惯用:

for my $i (0 .. $#array) {
    say $array[$i];
}

for my $item (@array) {
    say $item;
}

这就是为什么在惯用的Perl代码中很少看到C-style for循环的原因。

此构造记录在perldoc perlsyn

答案 1 :(得分:1)

这只是一个无限循环,相当于写while(1)

它的工作原理是因为Perl有一个C风格的for循环,它有三个参数:初始化,条件和在每个循环上执行的表达式。

通常,这类似于for(x=0; x<10; x++),意思是“将x初始化为0,测试x是否小于10,每次循环增加x

诀窍是这三个都是可选的,所以for(;;)意味着“无需初始化,不进行任何测试,并且在循环结束时不做任何特殊操作”。

答案 2 :(得分:0)

它只是一个无限循环,就像C编程语言一样。 您的代码将永远陷入此声明中。 或者在您的情况下,执行for块直到手动终止程序。