Mac::FSEvents - Monitor a directory structure for changes

      use Mac::FSEvents;

      my $fs = Mac::FSEvents->new( {
        path    => '/',       # required, the path to watch
        latency => 2.0,       # optional, time to delay before returning events
        since   => 451349510, # optional, return events from this eventId
        flags   => NONE,      # optional, set stream creation flags
      } );

      my $fh = $fs->watch;

      # Select on this filehandle, or use an event loop:
      my $sel = IO::Select->new($fh);
      while ( $sel->can_read ) {
        my @events = $fs->read_events;
        for my $event ( @events ) {
          printf "Directory %s changed\n", $event->path;

      # or use blocking polling:
      while ( my @events = $fs->read_events ) {

      # stop watching

    This module implements the FSEvents API present in Mac OSX 10.5 and
    later. It enables you to watch a large directory tree and receive events
    when any changes are made to directories or files within the tree.

    Event monitoring occurs in a separate C thread from the rest of your

    new ( { ARGUMENTS } )
        Create a new watcher. A hash reference containing parameters is

        path    Required. The full path to the directory to watch. All
                subdirectories beneath this directory are watched.

        latency Optional. The number of seconds the FSEvents service should
                wait after hearing about an event from the kernel before
                passing it along. Specifying a larger value may result in
                fewer callbacks and greater efficiency on a busy filesystem.

                Default: 2.0

        since   Optional. A previously obtained event ID may be passed as
                the since argument. A notification will be sent for every
                event that has happened since that ID. This can be useful
                for seeing what has changed while your program was not

        flags   Optional.  Sets the flags provided to L<FSEventStreamCreate>.
                In order to import the flag constants, you must provide
                C<:flags> to C<use Mac::FSEvents>.  The following flags are

                    IGNORE_SELF (Only available on OS X 10.6 or greater)
                    FILE_EVENTS (Only available on OS X 10.7 or greater)

                Consult the FSEvents documentation for what these flags do.

                Default: NONE

        Begin watching. Returns a filehandle that may be used with select()
        or the event loop of your choice.

        Returns an array of pending events. If using an event loop, this
        method should be called when the filehandle becomes ready for
        reading. If not using an event loop, this method will block until an
        event is available.

        Events are returned as Mac::FSEvents::Event objects.

        Stop watching.


    Andy Grundman, <>

    Copyright (C) 2009 by Andy Grundman

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself, either Perl version 5.8.8 or, at
    your option, any later version of Perl 5 you may have available.