我正在为 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);
}
;;
究竟是什么意思?它是在创建套接字时定义的特殊运算符吗?努力寻找文档!
最佳答案
for(;;)
是一个 C-ish 习语,读作 forever
,是一个永不终止的循环。不是来自 C 的人会改写 while (1)
。
通常,这个 C 风格的 for
循环包含三个语句:初始化、循环条件和某个步骤:
for (init; condition; step) {
body;
}
完全等价于
{
init;
while (condition) {
body;
}
continue {
step;
}
}
一个空的条件
被认为永远为真。
一个常见的用法是遍历一个范围内的所有数字:
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 风格的 for 循环的原因。
此构造记录在 perldoc perlsyn
中.
关于perl - for(;;) (2 个分号) 循环是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23046769/