我正在研究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);
}
;;
究竟是什么意思?它是在创建套接字时定义的特殊运算符吗?苦苦寻找文件!
答案 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块直到手动终止程序。