我想知道是否可能,如果是这样,可以创建一个不断监视文件/ db的perl脚本,然后调用子例程来执行文本处理(如果文件已更改)。我很确定这可以使用套接字,但是这需要用于在共享主机上运行的站点上的网络聊天应用程序,我不太确定它上面是否允许使用套接字。
基本理念是:
提前致谢。
答案 0 :(得分:8)
许多操作系统运行的服务允许应用程序在更新文件或路径时注册要通知的请求。这通常称为File Alteration Monitor。有关可用的某些系统,请参阅链接的维基百科页面。最近的linux系统使用Inotify,之前使用的是Dnotify或gamin。 OS X使用FSEvents。 Windows有一个类似的系统。我不知道所有这些系统的跨平台工作的任何模块或机制,但CPAN上有特定的模块,例如SGI::FAM和File::Tail::FAM。
答案 1 :(得分:1)
我使用cron作业和调用Perl脚本的Makefile执行此操作。方便的是你自动获取Perl脚本的atime作为比较的时间戳,因为脚本的atime在被调用时会更新。
答案 2 :(得分:1)
use POE qw(Wheel::FollowTail);
POE::Session->create(
inline_states => {
_start => sub {
$_[HEAP]{tailor} = POE::Wheel::FollowTail->new(
Filename => "/var/log/thttpd.log",
InputEvent => "got_log_line",
ResetEvent => "got_log_rollover",
);
},
got_log_line => sub {
#print "Log: $_[ARG0]\n";
parseline($_[ARG0]);
},
got_log_rollover => sub {
#print "Log rolled over.\n";
},
}
);
POE::Kernel->run();
exit;
#parseline()...etc.