如何在Windows上使用File :: ChangeNotify?

use*_*319 5 perl winapi

我在Windows系统上安装了File :: ChangeNotify并尝试运行以下代码:

my $watcher =
     File::ChangeNotify->instantiate_watcher
         ( directories => [ 'C:\files' ],
             filter  => qr/\.txt$/
         );


 # # blocking
 while ( my @events = $watcher->wait_for_events() ) { print "new event"}
Run Code Online (Sandbox Code Playgroud)

当我运行脚本并尝试创建新.txt文件或修改脚本.txtc:\files的文件时没有打印任何内容.

too*_*lic 5

如果我添加这行,它适用于我(在Linux上):

$| = 1;
Run Code Online (Sandbox Code Playgroud)

然后我明白了new event.

请参阅perldoc perlvar:$|$OUTPUT_AUTOFLUSH

这是完整的代码:

use warnings;
use strict;
use File::ChangeNotify;

$| = 1;

my $watcher =
     File::ChangeNotify->instantiate_watcher
         ( directories => [ 'C:\files' ],
             filter  => qr/\.txt$/
         );


 # # blocking
 while ( my @events = $watcher->wait_for_events() ) { print "new event"}
Run Code Online (Sandbox Code Playgroud)

更新:正如cjm精明地指出的那样,添加换行符可以替代$|:

 while ( my @events = $watcher->wait_for_events() ) { print "new event\n"}
Run Code Online (Sandbox Code Playgroud)

  • 或者"打印"新事件\n"` (2认同)