PERL如何强制输出??

suyupin 2005-03-24 01:40:40
PERL如何强制输出??类似与C/C++ 的fflush()函数的?
...全文
147 点赞 收藏 6
写回复
6 条回复
xyzxyz1111 2005年03月24日
我觉得fflush的作用不在于想实时输出,而是什么时候调用fflush,就可以输出,也许是凑上一堆再输出。也许是一个字符就输出,之类的。而实时输出显然只是要求每个字符都输出。
回复 点赞
chenshibing 2005年03月24日
没懂楼主的意思
如果是像楼上那样只要实时输出的话不是只要
$|=1;
就可以了么
回复 点赞
xyzxyz1111 2005年03月24日
oops
第2个代码段应该为

print "abc";
flock(STDOUT, LOCK_EX); #lock
flock(STDOUT, LOCK_UN); #unlock
sleep 5;
print "def\n";
回复 点赞
xyzxyz1111 2005年03月24日
print 一般是把字符串放到缓冲区中,只有遇到\n等符号的时候才会输出。强制输出世纪上就是把缓冲区中的符号在还没有遇到\n的时候就输出。

我在perl的文档里找了一会,发现有这么一句
To avoid the possibility of miscoordination, Perl now flushes FILEHANDLE before locking or unlocking it.

所以可以用flock来实现

对比一下代码

#没有强制输出的
print "abc";
sleep 5;
print "def\n";

#使用强制输出的
print "abc";
sleep 5;
flock(STDOUT, LOCK_EX); #lock
flock(STDOUT, LOCK_UN); #unlock
print "def\n";

第一个abc在停止5秒后才同def一起打印出来, 而第二个abc则在停止之前就打印出来了,从而实现了fflush的功能。


回复 点赞
bulala 2005年03月24日
你可以使用 print STDOUT """;
print STDERR "";等
回复 点赞
winter_sui 2005年03月24日
强制输出??什么意思,是想把命令的结果显示出来么?
#!/usr/bin/perl -w
`ls`;
比如这个程序,正常来说ls是有输出的,可是由于perl的机制,他屏蔽了标准输出。所以运行后我们是什么一看不到的。

解决办法:把标准输出重定向到标准错误上。
#!/usr/bin/perl -w
`ls 1>&2`;
回复 点赞
发动态
发帖子
脚本语言(Perl/Python)
创建于2007-08-27

1.5w+

社区成员

3.3w+

社区内容

其他开发语言 脚本语言(Perl ,Python)
社区公告
暂无公告