1

程序: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.

我无法理解这里的问题。任何意见或建议表示赞赏。

4

1 回答 1

6

它看起来像一个打印缓冲区问题。当您在打印中包含换行符时,缓冲区会立即刷新。在您的第一种情况下,如果没有换行符,它们会在它们已满或程序退出时被刷新。

正如dgw评论的那样,由于warn转到 STDERR 并打印到 STDOUT,它们也不在同一个缓冲区中。

于 2013-01-08T09:15:43.827 回答