2012年7月29日星期日

Perl经验谈之二------不缓存buffer直接输出

Perl中的print是和C语言中一样,当需要输出的数据量不能达到其内部设定的buffer的大小时候是不会输出到标准输出的。因此需要显示的去设定,当需要实时的输出数据的时候,让perl刷新缓存,将缓存中内容在下一个print之前输出到标准输出。


设定方法:在需要直接输出的代码之前加上如下的指令:
$| = 1;
当不需要这个特性之后,尽量将其关闭,提高程序的性能,毕竟每次都直接输出,是需要耗费一定的系统资源的。关闭的方法只需要将"$|"的值设置为0就可以了。

示例代码如下:

#!/usr/bin/perl

#将$|设置为1,代码不经过缓存,直接输出,会看到每sleep1秒,=输出一次
$| = 1;
for($i=0;$i<10;$i++){
print "=";
sleep 1;
}
print "\n";

#打开缓存开关,10s后一次性输出所有=
$| = 0;
for($i=0;$i<10;$i++){
print "=";
sleep 1;
}

参考:http://desk.stinkpot.org:8080/tricks/index.php/2006/02/flush-perls-print-buffer/

没有评论:

发表评论