pp2@nereida:~/src/perl/Event/select$ cat -n inotify2.pl
  1  #!/usr/bin/perl -w
  2  use strict;
  3  use Linux::Inotify2;
  4
  5  my $inotify = new Linux::Inotify2;
  6
  7  $inotify->watch ("/etc/passwd", IN_ACCESS | IN_MODIFY, sub {
  8     my $e = shift;
  9     printf "events for <%s> received: %s\n", $e->fullname, $e->mask;
 10     print "$e->{w}{name} was accessed\n" if $e->IN_ACCESS;
 11     print "$e->{w}{name} was modified\n" if $e->IN_MODIFY;
 12     print "$e->{w}{name} is no longer mounted\n" if $e->IN_UNMOUNT;
 13     print "events for $e->{w}{name} have been lost\n" if $e->IN_Q_OVERFLOW;
 14
 15     $e->w->cancel;
 16  });
 17
 18  $inotify->poll;
El método watch tiene la sintáxis:
     $watch = $inotify->watch ($name, $mask[, $cb])
Añade un nuevo vigilante al notificador. 
El vigilante creará eventos de las clases especificadas 
en $mask para el camino especificado en $name.
El argumento $cb es una referencia al manejador.
Al manejador se le pasará un objeto  Linux::Inotify2::Event .
Las máscara puede formarse a partir de ciertas constantes predefinidas. He aqui algunas:
IN_ACCESS objeto accedido IN_MODIFY objeto modificado IN_ATTRIB ha cambiado 'metadata' del objeto
IN_OPEN objeto ha sido abierto IN_MOVED_FROM Se ha movido fichero desde este objeto (directorio) IN_MOVED_TO Se ha movido fichero a este objeto (directorio) IN_CREATE fichero creado en este objeto (directorio) IN_DELETE fichero suprimido en este objeto (directorio) IN_DELETE_SELF objeto suprimido IN_MOVE_SELF objeto movido IN_ALL_EVENTS todos los anteriores
En esta lista,
Linux::Inotify2::Watch que vigila
Los vigilantes disponen de los siguientes métodos:
$watch->name
El nombre del "watch".
Para los directorios es el nombre de la entrada sin los prefijos del camino
$watch->mask
           Máscara especificada para el "watch" 
$watch->cb ([new callback])
$watch->cancel
Cancela/suprime el watch. Los eventos futuros, incluso si fueran insertados en la cola, seránm descartados.
$watch->fullname
   Nombre completo del objeto.
La llamada $count = $inotify->poll lee eventos producidos por el kernel
y los maneja. Si el fichero esta en modo 'blocking' el método
esperará por al menos un evento. Si no esta en modo 'blocking' 
y no hay eventos que pueda leer retornará inmediatamente.
Retorna el número de eventos que han sido manejados.
Los objetos Linux::Inotify2::Event describen a los eventos. Son pasados como primer argumento al callback del vigilante. Entre otros, disponen de los siguientes métodos:
$event->w El vigilante
$event->name El camino del objeto, relativo al nombre del vigilante
$event->mask La máscara del evento recibido.
Además de los eventos desritos para el vigilante, tanmbién están disponibles:
IN_ISDIR es un directorio IN_Q_OVERFLOW cola desbordada
$event->IN_xxx Cierto si el evento casa con la máscara
| Terminal 2 | 
pp2@nereida:~/src/perl/Event/select$ cat /etc/passwd  | 
| Terminal 1 (ejecución) | 
pp2@nereida:~/src/perl/Event/select$ ./inotify2.pl events for </etc/passwd> received: 1 /etc/passwd was accessed  | 
pp2@nereida:~/src/perl/Event/select$ cat -n watchfile.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use Event;
 4  use Linux::Inotify2;
 5
 6  my $inotify = Linux::Inotify2->new;
 7
 8  Event->io (fd => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll });
 9
10  $inotify->watch ("/tmp", IN_ALL_EVENTS, sub {
11     my $e = shift;
12     printf "events for <%s>:%d received: %x\n", $e->fullname, $e->cookie, $e->mask;
13     print "$e->{w}{name} was accessed\n" if $e->IN_ACCESS;
14     print "$e->{w}{name} was modified\n" if $e->IN_MODIFY;
15     print "$e->{w}{name} is no longer mounted\n" if $e->IN_UNMOUNT;
16     print "events for $e->{w}{name} have been lost\n" if $e->IN_Q_OVERFLOW;
17  });
18
19  Event::loop;
La llamada a $inotify->fileno
retorna el  fileno  para el objeto  Linux::Inotify2 .
Es responsabilidad del programador que el método  poll  haya sido llamado
cuando este fichero esté listo para lectura.
pp2@nereida:~/src/perl/Event/select$ ./watchfile.pl events for </tmp/tailtest.tmp>:0 received: 100 events for </tmp/tailtest.tmp>:0 received: 20 events for </tmp/tailtest.tmp>:0 received: 4 events for </tmp/tailtest.tmp>:0 received: 8 events for </tmp/tailtest.tmp>:0 received: 20 events for </tmp/tailtest.tmp>:0 received: 2 /tmp was modified events for </tmp/tailtest.tmp>:0 received: 8 events for </tmp/v722626>:0 received: 40000020 events for </tmp/v722626>:0 received: 40000010 events for </tmp/v722626>:0 received: 40000200 ^C  | 
pp2@nereida:~/src/perl/Event/select$ touch /tmp/tailtest.tmp pp2@nereida:~/src/perl/Event/select$ echo "Hola" >> /tmp/tailtest.tmp pp2@nereida:~/src/perl/Event/select$  | 
 
