perl的输出陷阱

以前现用perl为我们的首页系统写个daemon进程来做更新首页的事情,其实简单的说就是前端的同事把新的页眉放到存储里面。我的脚本去定期检测一下md5值,然后取出来。取出来后会对指定的字段进行替换。但是在做的时候就遇到点问题,日志一直不打出来。后来简单测试了一下

  
#!/usr/bin/perl  
use strict;  
use warnings;  
open LOG,">test.out" or die "open file failed\n";  
foreach my $k (0..25)  
{

print LOG ($k,"\n");  
sleep(1);  
}  

运行这个的时候你会发现只有程序结束了才会写到文件。后来咨询了一下学了这样搞

  
#!/usr/bin/perl  
use strict;  
use warnings;  
use IO::Handle;  
open LOG,">test.out" or die "open file failed\n";  
LOG->autoflush();  
foreach my $k (0..25)  
{

print LOG ($k,"\n");  
sleep(1);  
}  

当然也可以选择这样做

  
#!/usr/bin/perl  
use strict;  
use warnings;  
open LOG,">test.out" or die "open file failed\n";  
foreach my $k (0..25)  
{  
syswrite(LOG,"$k\n",1024);  
sleep(1);  
}