Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Perl打印圆点赢得';在我打印其他东西之前,我不会出现在屏幕上_Perl - Fatal编程技术网

用Perl打印圆点赢得';在我打印其他东西之前,我不会出现在屏幕上

用Perl打印圆点赢得';在我打印其他东西之前,我不会出现在屏幕上,perl,Perl,这听起来很疯狂,但当我使用行printf(“.”)时,屏幕上什么也不会显示,直到我打印出其他内容。当我打印出其他信息时,从一个简单的行返回到实际数据,所有备份的点都会打印出来。如果我使用printf(“.\n”),那么它可以正常工作 我在Ubuntu系统上做这件事,如果这有区别的话 谢谢这是一个缓冲问题。尝试设置自动刷新:$|=1 { $| = 1; print "."; } sleep 1 for 1..5; STDOUT是行缓冲的,因此print“\n”工作正常 更多信息:

这听起来很疯狂,但当我使用行
printf(“.”
)时,屏幕上什么也不会显示,直到我打印出其他内容。当我打印出其他信息时,从一个简单的行返回到实际数据,所有备份的点都会打印出来。如果我使用
printf(“.\n”)
,那么它可以正常工作

我在Ubuntu系统上做这件事,如果这有区别的话


谢谢

这是一个缓冲问题。尝试设置自动刷新:
$|=1

{
    $| = 1;
    print ".";
}
sleep 1 for 1..5;
STDOUT
是行缓冲的,因此
print“\n”
工作正常

更多信息:


另一个有用的答案是:

正如其他人所说,这是一个缓冲问题。在最近足够多的Perl版本中,您可以执行以下操作:

 use IO::Handle
 STDOUT->autoflush()
我认为这比使用
$|
变量更简洁,即使它以同样的方式工作

要将
autoflush
方法附加到任何未来的句柄,需要使用
use IO::Handle
。而
autoflush
也有其独特之处,即在不传递值的情况下,它假定
1
,如
perlvar
手册页中所述:

每个方法都采用一个可选的EXPR,如果提供了该EXPR,则为所讨论的“IO::Handle”属性指定新值。如果没有提供,大多数方法对当前值不做任何处理——除了“autoflush()”,它将假定为1,只是不同而已


STDOUT->autoflush(1)
。为什么
sleep 1 for 1..5
而不是
sleep 5
?perldoc-f sleep…在一些较旧的系统上,它的睡眠时间可能比您要求的时间少整整一秒,取决于秒数的计算方式。因此,与睡眠4到5秒相比,您更喜欢睡眠0到5秒?您可以添加验证并睡眠更多或跳过额外的秒数;)好的,下次我将使用sleep(5)当没有格式说明符时,不要使用
printf
。这不是C,打印也可以。