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

标签 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); 
}

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

最佳答案

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/

相关文章:

mysql - 为什么 mysql odbc 配置没有在 Linux 中设置?

perl - Perl 中的 -> 和::有什么区别

c - C 文件如何包含在 freeSwitch(一种调用框架)中?

python - 如何摆脱无法杀死的 Freeswitch channel

excel - 使用 Excel 模块通过 write_formula() 将单元格值读取为字符串集

google-chrome - 自由切换 WebRTC 到 SIP

voip - 如何将 FreeSwitch 连接到 FreeSwitch?

用于在 Linux 上创建 Excel 电子表格的 Python 或 Perl

Perl:优先级(左列表运算符)

perl - 是否有用于将秒数转换为英语的 CPAN 模块?