enum FileChangeEvent (:FileChanged(1), :FileRenamed(2));
class IO::Notification {}

从本质上讲,此类作为一个占位符存在,用于 IO::Notification.watch-path($path) 方法,该方法生成一个 SupplyIO::Notification::Change 事件,用于文件或目录。

方法§

方法 watch-path§

method watch-path(IO::Notification: Str() $path:$scheduler = $*SCHEDULER)

返回一个 Supply,它会发出 IO::Notification::Change 对象。

如果 $path 是一个文件,则只会报告该文件的修改。如果 $path 是一个目录,则会报告对目录本身的修改(例如权限更改)和目录中的文件(包括目录中的新文件)。

:$scheduler 命名参数允许你指定哪个线程调度程序将负责通知流;如果使用默认调度程序,则可以省略它。

my $supply = IO::Notification.watch-path"/var/log/syslog" );
 
$supply.tap-> $v { say "Got "$v });
 
sleep 60;

此代码片段对系统日志文件设置监视,发出已发生的事件类型或捕获错误;创建的 Supply 被轻拍,并且事件被打印。它这样做持续 60 分钟,发出类似这样的内容

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

此方法提供的唯一信息类型是某个内容已更改或已重命名的简单事实。你需要实际打开并读取文件或目录以检查实际更改。