Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re: Reading a file live!

by golux (Hermit)
on Mar 07, 2014 at 19:38 UTC ( #1077447=note: print w/replies, xml ) Need Help??

in reply to Reading a file live!

Hi negativ_m,

My suggestion would be to assign a variable to the length of the file prior to the first append. Then, just check the filesize; when it grows you know you've got more text to read:

my $len = (-s "file.txt") || 0; system ("perl $var > file.txt &"); # ... later .... my $newlen = (-s "file.txt") || 0; if ($newlen > $len) { my @newlines = read_new_lines("file.txt", $len); $len = $newlen; # Adjust length to new end of file }

The subroutine read_new_lines() would look something like this:

sub read_new_lines { my ($fn, $offset) = @_; use IO::File; my $fh = new IO::File($fn); $fh or die "Failed to read '$fn' ($!)\n"; seek($fh, $offset, 1) or die "Failed seek ($!)\n"; chomp(my @lines = <$fh>); return (@lines); }

I use this trick a lot for webpages which need to monitor continuously updating logfiles.

say  substr+lc crypt(qw $i3 SI$),4,5

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1077447]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2018-05-27 02:14 GMT
Find Nodes?
    Voting Booth?