我想在更改源代码或测试时自动运行prove,我正在使用Win32::ChangeNotify,但是我不知道为什么即使单个文件更改,while主体也运行两次,我实际上想监视所有更改,但只执行行动一次。

require Win32::ChangeNotify;

$notify = Win32::ChangeNotify->new("./", 1, "LAST_WRITE");

while (my @events = $notify->wait) {
    print @events, "----\n";
    $notify->reset;
}

最佳答案

File::ChangeNotify提供更好的事件,它是跨平台的。

use File::ChangeNotify;
use Data::Dumper;

$| = 1;

my $watcher = File::ChangeNotify->instantiate_watcher(
    directories => [ 't', 'lib' ],
    filter => qr/\.t|\.pl|\.pm/,
);

while (my @events = $watcher->wait_for_events) {
    print Dumper(@events);
}

修改单个文件后,它会打印单个事件,至少这是我观察到的。

10-04 22:56