Perl 监视和读取文件中的新行?

Perl 监视和读取文件中的新行?,perl,anyevent,Perl,Anyevent,程序使用AnyEvent循环。程序应该读取有时(很少)出现在本地文件系统的文本文件中的新行。据我所知,不能使用AnyEvent::io。我可以建议从文件中读取新行吗?一种方法是使用跟踪和报告文件系统对象事件的工具“监视”文件 基于模块文档中的概要,使用的示例 use warnings; use strict; use feature 'say'; use AnyEvent; use Linux::Inotify2; my $file = shift @ARGV || 'growing.txt

程序使用AnyEvent循环。程序应该读取有时(很少)出现在本地文件系统的文本文件中的新行。据我所知,不能使用AnyEvent::io。我可以建议从文件中读取新行吗?

一种方法是使用跟踪和报告文件系统对象事件的工具“监视”文件

基于模块文档中的概要,使用的示例

use warnings;
use strict;
use feature 'say';

use AnyEvent;
use Linux::Inotify2;

my $file = shift @ARGV || 'growing.txt';
die "Usage: $0 file-to-watch\n" if not $file;

say '';
open my $fh, '<', $file  or die "Can't open $file: $!";
print while <$fh>;

my $inotify = Linux::Inotify2->new or die "Can't create inotify object: $!";

$inotify->watch( $file, IN_MODIFY, sub {
    my $e = shift;
    if ($e->IN_MODIFY) {
        print while <$fh>;
    }
});

my $inotify_w = AnyEvent->io (
    fh => $inotify->fileno, poll => 'r', cb => sub { $inotify->poll }
);

1 while $inotify->poll;
“观察者”会打印

new line another 对于inode更改,触发的是_ATTRIB中的


然后,您可能需要重新打开该文件(并且可能首先找到它)。单独的目录监视器在这里会非常有用。所有这些都可以通过单独使用目录监视器来完成。

Um,请更好地解释一下——您的意思是捕获文件更改事件并读取对其所做的操作吗?还是别的什么?请显示“程序”的相关部分。文件系统上有一个文本文件(accept.txt),在开始时,perl脚本读取其中的行并继续工作。有时可以向文件中添加新行。添加这些行后,必须在程序中读取它们。@d您可以尝试“确定”,这将是
Linux::Inotify2
检测更改的工作;例如,见。我可能会也可能不会在合理的时间范围内发布答案。您确实应该发布代码的相关部分。@Dmitry进一步编辑,并对可能的监视上下文进行注释 new line another
$inotify->watch( $file, 
    IN_MODIFY |IN_ATTRIB | IN_MOVE_SELF | IN_DELETE_SELF,  
    sub {
        my $e = shift;
        my $name = $e->fullname;
        if ($e->IN_MODIFY) {
            print while <$fh>;
        }
        if ($e->IN_ATTRIB)      { say "$name meatadata changed" }
        if ($e->IN_MOVE_SELF)   { say "$name was moved" }
        if ($e->IN_DELETE_SELF) { say "$name was deleted" }
});