/usr/share/perl5/File/ChangeNotify.pm is in libfile-changenotify-perl 0.20-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | package File::ChangeNotify;
BEGIN {
$File::ChangeNotify::VERSION = '0.20';
}
use strict;
use warnings;
use Carp qw( confess );
use Class::MOP;
# We load this up front to make sure that the prereq modules are installed.
use File::ChangeNotify::Watcher::Default;
use Module::Pluggable::Object;
sub instantiate_watcher {
my $class = shift;
for my $class ( $class->usable_classes() ) {
if ( _try_load($class) ) {
return $class->new(@_);
}
}
return File::ChangeNotify::Watcher::Default->new(@_);
}
{
my @usable_classes = ();
sub usable_classes {
my $class = shift;
return @usable_classes if @usable_classes;
return @usable_classes
= grep { _try_load($_) } $class->_all_classes();
}
}
{
my %tried;
sub _try_load {
my $class = shift;
return $tried{$class}
if exists $tried{$class};
eval { Class::MOP::load_class($class) };
my $e = $@;
die $e if $e && $e !~ /Can\'t locate|did not return a true value/;
return $tried{$class} = $e ? 0 : 1;
}
}
my $finder = Module::Pluggable::Object->new(
search_path => 'File::ChangeNotify::Watcher' );
sub _all_classes {
return
sort grep { $_ ne 'File::ChangeNotify::Watcher::Default' }
$finder->plugins();
}
1;
# ABSTRACT: Watch for changes to files, cross-platform style
=pod
=head1 NAME
File::ChangeNotify - Watch for changes to files, cross-platform style
=head1 VERSION
version 0.20
=head1 SYNOPSIS
use File::ChangeNotify;
my $watcher =
File::ChangeNotify->instantiate_watcher
( directories => [ '/my/path', '/my/other' ],
filter => qr/\.(?:pm|conf|yml)$/,
);
if ( my @events = $watcher->new_events() ) { ... }
# blocking
while ( my @events = $watcher->wait_for_events() ) { ... }
=head1 DESCRIPTION
This module provides an API for creating a
L<File::ChangeNotify::Watcher> subclass that will work on your
platform.
Most of the documentation for this distro is in
L<File::ChangeNotify::Watcher>.
=head1 METHODS
This class provides the following methods:
=head2 File::ChangeNotify->instantiate_watcher(...)
This method looks at each available subclass of
L<File::ChangeNotify::Watcher> and instantiates the first one it can
load, using the arguments you provided.
It always tries to use the L<File::ChangeNotify::Watcher::Default>
class last, on the assumption that any other class that is available
is a better option.
=head2 File::ChangeNotify->usable_classes()
Returns a list of all the loadable L<File::ChangeNotify::Watcher>
subclasses.
=head1 BUGS
Please report any bugs or feature requests to
C<bug-file-changenotify@rt.cpan.org>, or through the web interface at
L<http://rt.cpan.org>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 DONATIONS
If you'd like to thank me for the work I've done on this module,
please consider making a "donation" to me via PayPal. I spend a lot of
free time creating free software, and would appreciate any support
you'd care to offer.
Please note that B<I am not suggesting that you must do this> in order
for me to continue working on this particular software. I will
continue to do so, inasmuch as I have in the past, for as long as it
interests me.
Similarly, a donation made in this way will probably not make me work
on this software much more, unless I get so many donations that I can
consider working on free software full time, which seems unlikely at
best.
To donate, log into PayPal and send money to autarch@urth.org or use
the button on this page:
L<http://www.urth.org/~autarch/fs-donation.html>
=head1 AUTHOR
Dave Rolsky <autarch@urth.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2011 by Dave Rolsky.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
=cut
__END__
|