perl中如何使缓冲区自动刷新
回复 #3 xdwjack 的帖子
$|这个变量是和对应的文件句柄挂钩的 默认对STDOUT操作 你如果想操作其他文件句柄就要先select,写的tricky一点,比如你想设置$filehadler这一文件句柄的auto flush则 |
$|将对当前select的FILEHANDLE起作用,默认是STDOUT。
使用方法如下:
$old = select FILEHANDLE;
$| = 1; #autoflush
select $old;
对某些对象,还可以直接使用autoflush方法,方法如下:
use IO::Socket;
$socket = IO::Socket::INET->new(...);
$socket->autoflush(1); #但经过测试,似乎不起作用,不清楚为什么
附:不起作用的原因是使用了类似 $message = <$socket>这样的用法,使用<>应该会等有回车才会返回,导致程序会停在这个语句上。如果使用$socket->recv($message, 1000)则没有问题。
使用方法如下:
$old = select FILEHANDLE;
$| = 1; #autoflush
select $old;
对某些对象,还可以直接使用autoflush方法,方法如下:
use IO::Socket;
$socket = IO::Socket::INET->new(...);
$socket->autoflush(1); #但经过测试,似乎不起作用,不清楚为什么
附:不起作用的原因是使用了类似 $message = <$socket>这样的用法,使用<>应该会等有回车才会返回,导致程序会停在这个语句上。如果使用$socket->recv($message, 1000)则没有问题。