sub Apache::send_range { my ($r,$fh, $offset, $end) = @_; seek($fh,$offset,0); my $buf; my $bufsiz=4096; my $current_position = $offset; my $read_size= sub { my $amount_to_go = ($end - $current_position); if ($amount_to_go <= $bufsiz) { $bufsiz; } else { $amount_to_go; } } while (read($fh,$buf,&$read_size)) { $current_position += &$read_size; $r->print($buf); } }