my $bufflen = 4 * 1024; #or w/e
do {
$result = read ( IN, $buffer,
$bufflen-length($buffer), length($buffer) );
} while ( $result && ( length($buffer) < $bufflen ) );
####
my $newline = "\n"; #or some other unique record separator
## if we're not at eof
if ($result > 0) {
my $last_newline = rindex $buffer, $newline;
my $remainderlen = length($buffer)-$last_newline-length($newline);
if ($remainderlen <= 0) {
$remainder = '';
} else {
$remainder = substr($buffer, $last_newline+length($newline),
$remainderlen, '');
}
}
## this is important: prefix the remainder before next chunk
$buffer = $remainder;
####
$buffer .= ;
####
foreach my $regex (@conversions) {
my @results = ( $buffer =~ s/$regex->{from}/$regex->{to}/g );
my $reps_done = 0;
grep { $reps_done += $_ } @results;
$regex->{count} += $reps_done;
}
## and do whatever with the result
print OUT $buffer;