通过unix命令逐行传输perl输出到文件

时间:2011-07-21 15:16:49

标签: perl unix

我在unix环境中创建了一个小的perl程序:

#! /usr/bin/perl
use strict; 
use warnings; 

my $counter = 0;  
while ($counter < 10) {
  printf "%s\n", $counter;
  $counter++;  
  sleep(2);
}

如果我在命令行启动它,它将在20秒内从0到9计数。这就是我想要的。

但如果我使用命令将输出传输到文件(myprog.pl >> myprog.log),那么输出将在程序结束时(20秒后)立即写入。

我希望程序将输出逐行写入文件。因此,在10秒后,myprog.log中应该有5行。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:11)

这是预期的缓冲行为,但您的脚本可以change that

#! /usr/bin/perl
use strict; 
use warnings; 

$| = 1; # <------- Enable autoflush    

my $counter = 0;  
while ($counter < 10) {
  printf "%s\n", $counter;
  $counter++;  
  sleep(2);
}

答案 1 :(得分:2)

关于这个主题的有趣讨论:http://perl.plover.com/FAQs/Buffering.html