选择undef,undef,undef .XX

时间:2014-07-14 23:16:23

标签: perl

几年前,当我最初学习Perl时,我发现自己想要说些什么:

sleep .07;

但这实际上并不奏效。

有人教我使用:

select undef, undef, undef, .07;

代替。

我一直想知道: 这是什么意思,为什么它有效?

2 个答案:

答案 0 :(得分:9)

使用记录的第三种select形式:

select RBITS,WBITS,EBITS,TIMEOUT
     

使用指定的位掩码调用select(2)系统调用

....
     

这样可以实现250毫秒的睡眠:

    select(undef, undef, undef, 0.25);

实现此功能的更好方法是使用Time::HiRes qw(usleep)

use Time::HiRes qw(usleep);

usleep($microseconds);

答案 1 :(得分:5)

the documentation for select中,它的描述如下:

...
select RBITS,WBITS,EBITS,TIMEOUT
        This calls the select(2) syscall with the bit masks specified,
        which can be constructed using "fileno" and "vec", along these
        lines:

            $rin = $win = $ein = '';
            vec($rin, fileno(STDIN),  1) = 1;
            vec($win, fileno(STDOUT), 1) = 1;
            $ein = $rin | $win;
...

据推测,这只是一个任意命令,其超时精度高于sleep。这就是它的原因。文档中还提到了这一点:

You can effect a sleep of 250 milliseconds this way:

    select(undef, undef, undef, 0.25);

TL; DR:这是一种在超时时调用select函数的方法。