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

通过unix命令将perl输出逐行传输到文件,perl,unix,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,那么2

我在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行。有办法做到这一点吗?

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


关于这个主题的有趣讨论:

不需要printf。打印$counter\n;将执行您想要的操作。带autoflush的一行程序:perl-we'$|=1$\=\N休眠2并在$i++<10;时打印$i@TLP,接近但不是精确的模拟。在每个数字之前打印1..10暂停,OP在每个数字之后打印0..9暂停。FWIW,-l可以更紧凑地代替$\=\n。
#! /usr/bin/perl
use strict; 
use warnings; 

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

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