缓冲输出文件

时间:2013-06-10 01:06:25

标签: perl buffer text-files output

我有一个在我的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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

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

use IO::File;

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