Perl for(;;)(2个分号)循环是什么意思?

Perl for(;;)(2个分号)循环是什么意思?,perl,freeswitch,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',

我正在为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); 
}

;;到底是什么意思平均值?它是创建套接字时定义的特殊运算符吗?努力寻找文档

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

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


通常,这类似于(x=0;x的
,它只是一个无限循环,就像C编程语言一样。
你的代码将永远卡在这条语句上。。
或者在您的情况下,执行for块直到程序手动终止。

for(;;)
是一个C-ish习语,它被解读为永远
,是一个永不终止的循环。非C语言的人会在(1)
时编写

通常,此C-style
for
循环有三条语句:初始化、循环条件和某些步骤:

for (init; condition; step) {
    body;
}
这完全等同于

{
    init;
    while (condition) {
        body;
    }
    continue {
        step;
    }
}
空的
条件
被视为始终为真

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

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

这就是为什么在惯用的Perl代码中很少看到C风格的for循环


这个构造被记录在。

中,它只是意味着永远循环。
for(;;){…}
while(){…}
和,
while(1){…}
以相同的方式编译成一个“无限”循环。另一方面,
{…}
编译成只执行一次的循环。您可以对这些循环使用
next
last
redo
(甚至
{…}
),就像所有其他循环一样。Syntax::Feature::loop添加了
循环{…}
,这做了同样的事情。“编写得更习惯”假设
标量(@array)
没有变化在中没有
true
语言单词Perl@Borodin说得好,我有点搞不清讨论哪种语言有一段时间了。现在修复了。
for my $i (0 .. $#array) {
    say $array[$i];
}
for my $item (@array) {
    say $item;
}