Men*_*hem 3 perl for-loop newline
我开始学习perl,使用perl.org上提供的Wrox Beginning Perl,并对第3章中提供的for循环示例提出疑问.
#!/usr/bin/perl
use warnings;
use strict;
my @count = (1..10);
for (reverse(@count)) {
print "$_...\n";
sleep 1;
}
print "Blast Off!\n"
Run Code Online (Sandbox Code Playgroud)
这是他们提供的脚本,它按预期工作.它显示一个数字,然后是......每秒钟,在每个数字之间等待一秒钟.完成后,显示Blast Off!
但是,如果我从print语句中删除换行符,则行为会发生变化.该脚本静默等待10秒钟,然后立即显示所有10个数字Blash Off!.为什么要改变?
#!/usr/bin/perl
use warnings;
use strict;
my @count = (1..10);
for (reverse(@count)) {
print "$_...";
sleep 1;
}
print "Blast Off!\n"
Run Code Online (Sandbox Code Playgroud)
eld*_*his 11
Perl正在缓冲print输出,并且直到换行符才刷新缓冲区.或者,您可以$| = 1在循环之前添加以告诉Perl刷新print语句之间的缓冲区,从而为您提供具有适当延迟的预期输出:
#!/usr/bin/perl
use warnings;
use strict;
$| = 1; #Add this line
my @count = (1..10);
for (reverse(@count)) {
print "$_...";
sleep 1;
}
print "Blast Off!\n"'
Run Code Online (Sandbox Code Playgroud)