Log::Log4perl::Config::Watch - Detect file changes
use Log::Log4perl::Config::Watch;
my $watcher = Log::Log4perl::Config::Watch->new( file => "/data/my.conf", check_interval => 30, );
while(1) { if($watcher->change_detected()) { print "Change detected!\n"; sleep(1); } }
This module helps detecting changes in files. Although it comes with the
Log::Log4perl
distribution, it can be used independly.
The constructor defines the file to be watched and the check interval
in seconds. Subsequent calls to change_detected()
will
check_interval
hasn't elapsed.
check_interval
have elapsed since the last physical check. If the file's modification
date has changed since the last physical check, it will return a true
value, otherwise a false value is returned.
Bottom line: check_interval
allows you to call the function
change_detected()
as often as you like, without paying the performing
a significant performance penalty because file system operations
are being performed (however, you pay the price of not knowing about
file changes until check_interval
seconds have elapsed).
The module clearly distinguishes system time from file system time. If your (e.g. NFS mounted) file system is off by a constant amount of time compared to the executing computer's clock, it'll just work fine.
To disable the resource-saving delay feature, just set check_interval
to 0 and change_detected()
will run a physical file test on
every call.
If you already have the current time available, you can pass it
on to change_detected()
as an optional parameter, like in
change_detected($time)
which then won't trigger a call to time()
, but use the value
provided.
Instead of polling time and file changes, new()
can be instructed
to set up a signal handler. If you call the constructor like
my $watcher = Log::Log4perl::Config::Watch->new( file => "/data/my.conf", signal => 'HUP' );
then a signal handler like
$SIG{HUP} = sub { $SIGNAL_CAUGHT = 1; };
will be installed, setting a globally accessible variable
Log::Log4perl::Config::Watch::SIGNAL_CAUGHT
to a true value when
the signal arrives. Comes with all the problems that signal handlers
go along with.
Mike Schilli, <log4perl@perlmeister.com>
Copyright 2003 by Mike Schilli <m@perlmeister.com> and Kevin Goess <cpan@goess.org>.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.