Linux::Inotify2+Growl::Anyでファイルの変更を監視する

Linux::Inotify2ではなくFilesys::Notify::Simpleを使った方がポータブルですが、とりあえずは習作ということで。監視しているディレクトリで何かがあるとピコピコ通知されるので、ああ今PCが頑張っているのだなあという気持ちになれます。

#!perl -w
use strict;
use Linux::Inotify2;
use Growl::Any 0.05; # ※Growl::NotifySend や Desktop::Notify などが必要

my $dir = shift(@ARGV) || '.';

my $w = Linux::Inotify2->new();
my $g = Growl::Any->new( appname => 'inotify-growl', events => ['modify'] );

# copied and modified from @Linux::Intofy2::EXPORT
my @events = qw(
    IN_ACCESS IN_MODIFY IN_ATTRIB IN_CLOSE_WRITE
    IN_CLOSE_NOWRITE IN_OPEN IN_MOVED_FROM IN_MOVED_TO
    IN_CREATE IN_DELETE IN_DELETE_SELF IN_MOVE_SELF
);
my $mask = IN_MODIFY | IN_MOVED_TO | IN_MOVED_FROM | IN_CREATE | IN_DELETE;

$w->watch($dir, $mask);

while(1) {
    my @e = $w->read();
    last unless @e;

    my @names;
    foreach my $event(@e) {
        push @names,  $event->fullname . ': '
            . join ' ', grep { $event->$_() } @events;
    }
    $g->notify( 'modify', 'inotify', join "\n", @names);
}
__END__