More on perl like tail
- From: reader@xxxxxxxxxxx (Harry Putnam)
- Date: Sat, 24 Oct 2009 15:57:01 -0500
Sorry about being tricky with what was an older thread. But I suspect
that thread died... and no one noticed there was an unaswered question
still there.
Shawn C originally suggested I use File::Tail. There was a short
exchange about why and then I began trying to use File::Tail but
haven't been successful with it. The details are below:
Shawn H Corey <shawnhcorey@xxxxxxxxx> writes:
open(FILE,"<./named-pipe") or die "Can't Open ./named-pipe: $!";
while(<FILE>){
print;
if(eof){
sleep 2;
seek (FILE,0,1);
}
}
It seems at least to survive repeated restarts of system logger.
If I write my script based on this code... what I'd be adding would be
code to get 1 or 2 rgx from the cmdline, then write the hits to
various files.
[...]
In the general case, modules usually take care of special cases that you
may not be aware of. That makes them the preferred method of solving a
problem.
In this case, the above code is a kludge. You can tell this because the
program sleeps, rather than waiting on input. When a program does
something to emulate what it really should be doing, it introduces code
that may not work in all cases.
I'm having trouble with File::Tail... or more likely the way I'm
trying to use it is wrongly setup.
But first about that sleep comment. As I read a little of File::Tail
and its very likely I'm not really understanding what I'm reading but,
it appears to be saying that it `sleeps' at times... the times are
a little more sophisticated... but none the less sleep.
Now the problem.
I've taken the first examples in the perldoc File::Tail output:
(http://search.cpan.org/~mgrabnar/File-Tail-0.99.3/Tail.pm)
use File::Tail;
$file=File::Tail->new("/some/log/file");
while (defined($line=$file->read)) {
print "$line";
}
And tied to make it work for my case (/var/adm/slpipe in the script is a
named-pipe that the system logger reads into):
cat fltr_sl
#!/usr/local/bin/perl
use strict;
use warnings;
use File::Tail;
my ($file,$line);
my $fname_in = "/var/adm/slpipe";
$file=File::Tail->new("$fname_in");
while (defined($line=$file->read)) {
print "$line";
}
When I run it, it doesn't show any errors, and appears to be waiting
on the pipe.
But no data ever comes out. I used the same test sequence as for the
earlier script that didn't use File::Tail (posted earlier in this
thread). The sequence is.
1) start the script `fltr_sl' shown above
2) To make sure if data is flowing thru the pipe start
start (in a different xterm) tail -f slpipe too.
2) kill -HUP the system logger.
3) Ensure some data is flowing thru the named-pipe by
running ssh root@localhost from a user account
I see 7-8 lines output to the tail -f slpipe command, but nothing to
the perl script fltr_sl.
And as I write this message, quite a few more lines are appearing at
the `tail -f slpipe' cmd, but still nothing at my perl filter.
Have I made some serious mistake in my attempted usage of File::Tail?
.
- Follow-Ups:
- Re: More on perl like tail
- From: Jim Gibson
- Re: More on perl like tail
- Prev by Date: Re: Why Perl's representative is a camel?
- Next by Date: printf and zero padding
- Previous by thread: Why Perl's representative is a camel?
- Next by thread: Re: More on perl like tail
- Index(es):
Relevant Pages
|