Perl for(;;)(2个分号)循环是什么意思?
我正在为VoIP软件Freeswitch编写脚本。该脚本将作为一个实例运行,监听套接字的入站消息 首先,我使用了Freeswitch提供的示例脚本,一切正常 然而,有一点让我感到厌烦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',
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-stylefor
循环有三条语句:初始化、循环条件和某些步骤:
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;
}