通过unix命令将perl输出逐行传输到文件
我在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
#! /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);
}