use HTTP::Response; use IO::File; my $response = new HTTP::Response( 404,undef,undef,"404 - Not found." ); $|=1; my $file = new IO::File "< $path"; if (defined $file) { $response->code( 200 ); binmode $file; my $size = -s $file; my ($startrange, $endrange) = (0,$size-1); if (defined $ENV{HTTP_RANGE} and $ENV{HTTP_RANGE} =~ /bytes\s*=\s*(\d+)-(\d+)?/) { $response->code( 206 ); ($startrange,$endrange) = ($1,$2 || $endrange); }; $file->seek($startrange,0); $response->header(Content_Length => $endrange-$startrange); $response->header(Content_Range => "bytes $startrange-$endrange/$size"); $response->content( sub { sysread($file, my ($buf), 16*1024); # No error checking ??? return $buf; }); }; print $response->decoded_content;