ce n'est pas plus simple d'utiliser split ?

while (<IN>){
chomp;
my ($sequence, $charge, $modification) = split /\t/;
print "$sequence\t$charge\t$modification\n";
}

avec juste un test...