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
In reply to Re: Using Select on file handles
by ikegami
in thread Using Select on file handles
by needperlhelp
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |