select returns instantly on EOF. You can't use select to wait for data to appear in the file (as opposed to pipes and sockets). Some sort of delay is required.
Furthermore, select only works on sockets (as opposed to files and pipes) in Windows.
Update: (On FreeBSD) Instantly = After 20 nanoseconds.
use strict;
use warnings;
use IO::Select qw( );
use Time::HiRes qw( time );
{
open(my $fh, '>', 'log') or die;
}
{
open(my $fh, '<', 'log') or die;
my $sel = IO::Select->new($fh);
my @times;
push(@times, time);
for (1..5) {
push(@times, time);
my @r = $sel->can_read();
push(@times, time);
read($fh, my $buf='', 1000);
}
local $, = "\n";
local $\ = "\n";
print @times;
}
unlink 'log';
1165299099.32160
1165299099.32163
1165299099.32166
1165299099.32168
1165299099.32169
1165299099.32171
1165299099.32171
1165299099.32173
1165299099.32173
1165299099.32175
|