perl array печатает только последнюю строку

У меня есть файл примерно из 3000 строк. Я сопоставляю каждое слово в документе со списками литературы, которые у меня есть. Если слово совпадает с тем, что есть в моем списке, я заменяю его. Теперь проблема в том, что код печатает только последнюю строку, а не весь файл.

Я уверен, что мой код не настолько эффективен и его обработка займет много времени, можно ли как-то повысить эффективность кода

open IN, "drug_list.txt" or die "No such file:$!\n";
open OUT, ">synergy1.txt" or die;
while(<IN>) {
      my @a=split /\t/,$_;
      $a[0]=~s/\s//g;
      $a[1]=~s/\s//g;
      $a[2]=~s/\s//g;
      $b[$i]=$a[0];
      $c[$i]=$a[1];
      $d[$i]=$a[2];
      ++$i;
}

use Data::Dumper;
open FILE, "input.txt" or die "No such file:$!\n";
while(<FILE>) {
    my $line= $_;
    chomp $line;
    $line =~ s/(\)|\()//g;
    $line =~ s/,/,/g;
    $line =~ s/\././g;
    @array = split ' ',$line;

    for($k=0;$k<$i;++$k) {
        foreach $n(@array) {
            if($n=~m/^\Q$b[$k]\E$/i) {
                $n=~s/$n/<span style="background-color:yellow;">$n<\/span>/;
            }
            if($n=~m/^\Q$c[$k]\E$/i) {
                $n=~s/$n/<span style="background-color:red;">$n<\/span>/;
            }
            if($n=~m/^\Q$d[$k]\E$/i) {
                $n=~s/$n/<span style="background-color:blue;">$n<\/span>/;
            }
         }  # end foreach
     }      # end for
}           # end while
print OUT "@array";
close(FILE);
close(IN);
0
задан TLP 30 April 2012 в 06:30
поделиться