Allora l'errore potrebbe essere un altro.
Ad esempio:
1. se in qualche riga c'e` un carattere non stampabile nei primi tre caratteri
2. se vengono lette due righe di seguito (magari a causa di caratteri "strani" negli "acapo").

Sarebbe bello vedere tutti i caratteri contenuti nel file, e verificare:
a. come viene segnalato l'acapo
b. se ci sono altri caratteri.

Se hai un programmino che ti fa vedere il binario del file, risolvi con quello, altrimenti:
codice:
while ($r = <IN> ) {
  $r =~ s/^(.{3})\.(.+)$/$1;$2/; 
  print OUT $r;
  foreach $c in $r {printf OUT "%x ", $c; } print OUT "\n";
}
(spero di aver imbroccato la sintassi corretta - non ho verificato e sono un po' arrugginito)