1Config::Watch(3) User Contributed Perl Documentation Config::Watch(3)
2
3
4
6 Log::Log4perl::Config::Watch - Detect file changes
7
9 use Log::Log4perl::Config::Watch;
10
11 my $watcher = Log::Log4perl::Config::Watch->new(
12 file => "/data/my.conf",
13 check_interval => 30,
14 );
15
16 while(1) {
17 if($watcher->change_detected()) {
18 print "Change detected!\n";
19 }
20 sleep(1);
21 }
22
24 This module helps detecting changes in files. Although it comes with
25 the "Log::Log4perl" distribution, it can be used independently.
26
27 The constructor defines the file to be watched and the check interval
28 in seconds. Subsequent calls to "change_detected()" will
29
30 · return a false value immediately without doing physical file checks
31 if "check_interval" hasn't elapsed.
32
33 · perform a physical test on the specified file if the number of
34 seconds specified in "check_interval" have elapsed since the last
35 physical check. If the file's modification date has changed since
36 the last physical check, it will return a true value, otherwise a
37 false value is returned.
38
39 Bottom line: "check_interval" allows you to call the function
40 "change_detected()" as often as you like, without paying the performing
41 a significant performance penalty because file system operations are
42 being performed (however, you pay the price of not knowing about file
43 changes until "check_interval" seconds have elapsed).
44
45 The module clearly distinguishes system time from file system time. If
46 your (e.g. NFS mounted) file system is off by a constant amount of time
47 compared to the executing computer's clock, it'll just work fine.
48
49 To disable the resource-saving delay feature, just set "check_interval"
50 to 0 and "change_detected()" will run a physical file test on every
51 call.
52
53 If you already have the current time available, you can pass it on to
54 "change_detected()" as an optional parameter, like in
55
56 change_detected($time)
57
58 which then won't trigger a call to "time()", but use the value
59 provided.
60
61 SIGNAL MODE
62 Instead of polling time and file changes, "new()" can be instructed to
63 set up a signal handler. If you call the constructor like
64
65 my $watcher = Log::Log4perl::Config::Watch->new(
66 file => "/data/my.conf",
67 signal => 'HUP'
68 );
69
70 then a signal handler will be installed, setting the object's variable
71 "$self->{signal_caught}" to a true value when the signal arrives.
72 Comes with all the problems that signal handlers go along with.
73
74 TRIGGER CHECKS
75 To trigger a physical file check on the next call to
76 "change_detected()" regardless if "check_interval" has expired or not,
77 call
78
79 $watcher->force_next_check();
80
81 on the watcher object.
82
83 DETECT MOVED FILES
84 The watcher can also be used to detect files that have moved. It will
85 not only detect if a watched file has disappeared, but also if it has
86 been replaced by a new file in the meantime.
87
88 my $watcher = Log::Log4perl::Config::Watch->new(
89 file => "/data/my.conf",
90 check_interval => 30,
91 );
92
93 while(1) {
94 if($watcher->file_has_moved()) {
95 print "File has moved!\n";
96 }
97 sleep(1);
98 }
99
100 The parameters "check_interval" and "signal" limit the number of
101 physical file system checks, simililarily as with "change_detected()".
102
104 Copyright 2002-2009 by Mike Schilli <m@perlmeister.com> and Kevin Goess
105 <cpan@goess.org>.
106
107 This library is free software; you can redistribute it and/or modify it
108 under the same terms as Perl itself.
109
110
111
112perl v5.12.2 2010-08-31 Config::Watch(3)