我从外部服务器获取数据流(文本格式),并希望逐行将其传递给脚本.该文件以连续方式附加.哪个是执行此操作的理想方法.使用Perl的IO :: Socket方法会做什么?最终,这些数据必须通过PHP程序(可重用)并最终登陆MySQL数据库.
问题是如何打开文件,不断更新?
mob*_*mob 24
在Perl中,您可以使用seek和tell读取不断增长的文件.它可能看起来像这样(从中大量借用perldoc -f seek)
open(FH,'<',$the_file) || handle_error(); # typical open call
for (;;) {
while (<FH>) {
# ... process $_ and do something with it ...
}
# eof reached on FH, but wait a second and maybe there will be more output
sleep 1;
seek FH, 0, 1; # this clears the eof flag on FH
}
Run Code Online (Sandbox Code Playgroud)
在perl中有几个模块可以更轻松地拖尾文件. IO :: Tail和 File :: Tail使用回调,另一个使用阻塞读取,因此它取决于哪种更适合您的需求.可能还有其他拖尾模块,但这些是我想到的两个.
IO :: Tail - 跟随文件/流的尾部
use IO::Tail;
my $tail = IO::Tail->new();
$tail->add('test.log', \&callback);
$tail->check();
$tail->loop();
Run Code Online (Sandbox Code Playgroud)
File :: Tail - 用于从不断更新的文件中读取的Perl扩展
use File::Tail;
my $file = File::Tail->new("/some/log/file");
while (defined(my $line= $file->read)) {
print $line;
}
Run Code Online (Sandbox Code Playgroud)