and some really ugly code for BrowserUKs select suggestion...
# $data is my filehandle to read from
my ($rin,$rout,$win,$wout,$ein,$eout); # for select
$rin=$rout=$win=$wout=$ein=$eout= '';
vec($rin, fileno($data), 1) = 1;
$ein = $rin;
my $last = time;
my $heartbeat_interval = 60;
my $timeout = 1; # for select
while (! $done) {
$rout=$wout=$eout= '';
my ($nfound, $timeleft) = select($rout=$rin, $wout=$win, $eout
+=$ein, $timeout);
if ($nfound and $rout & $rin) {
# read from <$data> carefully not to block
# count statistics
}
my $now = time;
if (($now - $last) >= $heartbeat_interval) {
$last = $now;
# do something every heartbeat_interval seconds
}
}