Ignoring AJAX for a second, Perl usually uses File :: Tail .
With AJAX, you probably have to override File :: Tail. Below is the basic version:
use strict;
use warnings;
use CGI qw( );
use Fcntl qw( SEEK_SET );
use Text::CSV_XS qw( decode_json encode_json );
my $qfn = '...';
{
my $cgi = CGI->new();
my $request = decode_json( $cgi->param('POSTDATA') || '{}' );
my $offset = $request->{offset} || 0;
open(my $fh, '<:raw', $qfn)
or die("Can't open \"$qfn\": $!\n");
seek($fh, $offset, SEEK_SET)
or die("Can't seek: $!\n");
my $data = '';
while (1) {
my $rv = sysread($fh, $data, 64*1024, length($data));
die("Can't read from \"$qfn\": $!\n") if !defined($rv);
last if !$rv;
}
$offset .= length($data);
print($cgi->header('application/json'));
print(encode_json({
data => $data,
offset => $offset,
}));
}
source
share