我的perl scipt的执行官不清楚.它不执行每行一行,我不知道为什么?
码:
#!usr/bin/perl -w
#line 200 "Level Check"
print "\n1";
$level=554;
if($level > 550){
warn "Level Higher Than 550 ($level)";
}
print "\n2";
Run Code Online (Sandbox Code Playgroud)
输出:
水平检查线203的水平高于550(554).
1
2
为什么不输出:
1
水平检查线203的水平高于550(554).
2
Bri*_*ach 11
因为STDOUT是缓冲的.STDERR在STDOUT被冲洗之前警告即将到来.
默认情况下warn()转到STDERR并print转到STDOUT.在您当前的代码中,您看到STDERR之前已被刷新STDOUT
您可以通过在顶部添加以下内容来更改该行为:
select STDERR; $| = 1;
select STDOUT; $| = 1;
Run Code Online (Sandbox Code Playgroud)
设置STDOUT并且STDERR无需缓冲,并在每个打印件上刷新.