class IO::Notification
enum FileChangeEvent (:FileChanged(1), :FileRenamed(2));
class IO::Notification {}
Essentially, this class exists as a placeholder for the IO::Notification.watch-path($path)
method, that produces a Supply
of IO::Notification::Change events for a
file or directory.
Methods
method watch-path
method watch-path(IO::Notification: Str() $path, :$scheduler = $*SCHEDULER)
Returns a Supply that emits IO::Notification::Change objects.
If $path
is a file, only modifications of that file are reported. If
$path
is a directory, both modifications to the directory itself (for
example permission changes) and to files in the directory (including new
files in the directory) are reported.
The :$scheduler
named argument allows you to specify which thread scheduler
is going to be responsible for the notification stream; it can be omitted if
the default scheduler is used.
my $supply = IO::Notification.watch-path( "/var/log/syslog" );
$supply.tap( -> $v { say "Got ", $v });
sleep 60;
This snippet of code sets a watch on the system log file, emitting the kind of event that has occurred or capturing an error otherwise; the created Supply is tapped, and the event printed. It does so for 60 minutes, emitting something like this:
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
Got /var/log/syslog: FileChanged
The only kind of information this method provides is the bare fact that something has change or been renamed. You will need to actually open and read the file or directory to check the actual changes.