2

我有一个在我的 perl 脚本中创建的输出文件。我希望所有信息都能立即输出,而不是逐渐输出。这将通过缓冲来完成?这将如何工作?

相关的代码行是:

 open( my $o,  '>', 'output.txt' ) or die "Can't open output.txt: $!";

 (then later on)
 print( $o ("$id"),"\n" );

 (then later on)
 close $o;
4

2 回答 2

2

Perl 实际上默认缓冲它的输出——你可以通过设置特殊变量来关闭它$|

如果您真的想要一次所有输出,最安全的选择是在您准备好之前不要将其发送输出,例如:

use IO::Handle qw( );  # Not necessary in newer versions of Perl.

my @output;

(then later on)
push @output, $id;

(then later on)
open( my $o,  '>', 'output.txt' ) or die "Can't open output.txt: $!";
$o->autoflush(1); # Disable buffering now since we really do want the output.
                  #   This is optional since we immediately call close.
print( $o map "$_\n", @output );
close $o;
于 2013-06-10T01:13:50.883 回答
2

您想关闭缓冲确保一次打印所有内容。老式的方法涉及$|直接处理特殊变量,但更好的方法是使用IO::File,它隐藏了细节。

use IO::File;

open my $o, '>', 'output.txt' or die "Can't open output.txt: $!";
$o->autoflush( 1 );
$o->print( $id );
于 2013-06-10T01:15:57.057 回答