program:testblocks.pl
#!/usr/bin/perl
use strict;
use warnings;
print "Hi";
BEGIN {
warn "BEGIN";
}
END {
warn "END";
}
INIT {
warn "INIT";
}
CHECK {
warn "CHECK";
}
UNITCHECK {
warn "UNITCHECK";
}
print "Hello";
输出:
BEGIN at testblocks.pl line 8.
CHECK at testblocks.pl line 17.
INIT at testblocks.pl line 14.
UNITCHECK at testblocks.pl line 20.
END at testblocks.pl line 11.
HiHello
现在,如果我在下面的打印语句中使用\n
print "Hi\n";
...
print "Hello\n";
输出是:
BEGIN at testblocks.pl line 8.
CHECK at testblocks.pl line 17.
INIT at testblocks.pl line 14.
Hi
UNITCHECK at testblocks.pl line 20.
Hello
END at testblocks.pl line 11.
我无法理解这里的问题。任何意见或建议。
答案 0 :(得分:6)
它看起来像打印缓冲区问题。当您在打印中包含换行符时,缓冲区会立即刷新。在第一种情况下,如果没有换行符,它们会在满员时或者程序退出时刷新。
作为dgw注释,由于warn
转到STDERR并打印到STDOUT,它们也不在同一个缓冲区中。