#! use Cwd; use Data::Dumper; use Linux::Inotify2; use strict; use warnings; my $Inotify_o=Linux::Inotify2->new(); $Inotify_o->watch(Cwd::abs_path('.'),IN_ALL_EVENTS); $|++; my $Done_f; # Ctrl/c signal handler --- works! $SIG{INT}=$SIG{TERM}=$SIG{HUP}= sub { # ? print "SignalHandler tripped!\n"; $Done_f=1; print "Attempting to unblock Inotify\n"; $Inotify_o->blocking(0); print "Inotify unblocked!\n" }; # SignalHandler: Done print "Starting while.\n"; while (!$Done_f) { print "Waiting on read.\n"; my @events_ao = $Inotify_o->read; print "read has been unblocked.\n"; unless (@events_ao > 0){ print "read error: $!\n"; } else { # To Do! foreach my $event_o (@events_ao) { print $event_o->fullname . " was modified\n" if $event_o->IN_MODIFY; if ($event_o->fullname =~ m{\.pm$} && $event_o->IN_CLOSE_WRITE) { # Have a module } elsif ($event_o->fullname =~ m{\.(?:cgi|pl)$} && $event_o->IN_CLOSE_WRITE) { # Have a script }; }; }; print "Continuing while.\n"; }; print "Exiting!\n"; __END__ #### perl sighandler.pl Starting while. Waiting on read. ^CSignalHandler tripped! Attempting to unblock Inotify Inotify unblocked! read has been unblocked. read error: Interrupted system call Continuing while. Exiting!