PERL如何强制输出??

suyupin 2005-03-24 01:40:40
PERL如何强制输出??类似与C/C++ 的fflush()函数的?
...全文
209 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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`;

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧