my %bufs; sub buf_print { my $fh = shift @_; $bufs{$fh} .= join($,, @_) . $\; my $to_write = int( length($bufs{$fh}) / $buf_size ) * $buf_size; syswrite($fh, substr($bufs{$fh}, 0, $to_write, '')) if $to_write; } sub buf_flush { my $fh = shift @_; my $to_write = length($bufs{$fh}); syswrite($fh, substr($bufs{$fh}, 0, $to_write, '')) if $to_write; }