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 に答える