J'utilise Perl pour effectuer un nettoyage de fichiers et je rencontre quelques problèmes de performance. L'une des principales parties de mon code concerne la normalisation des champs de nom. J'ai plusieurs sections qui ressemblent à ceci :
sub substitute_titles
{
my ($inStr) = @_;
${$inStr} =~ s/ PHD./ PHD /;
${$inStr} =~ s/ P H D / PHD /;
${$inStr} =~ s/ PROF./ PROF /;
${$inStr} =~ s/ P R O F / PROF /;
${$inStr} =~ s/ DR./ DR /;
${$inStr} =~ s/ D.R./ DR /;
${$inStr} =~ s/ HON./ HON /;
${$inStr} =~ s/ H O N / HON /;
${$inStr} =~ s/ MR./ MR /;
${$inStr} =~ s/ MRS./ MRS /;
${$inStr} =~ s/ M R S / MRS /;
${$inStr} =~ s/ MS./ MS /;
${$inStr} =~ s/ MISS./ MISS /;
}
Je passe par référence pour essayer d'obtenir au moins un peu de vitesse, mais je crains que l'exécution d'un si grand nombre (littéralement des centaines) de remplacements de chaînes spécifiques sur des dizaines de milliers (probablement des centaines de milliers à terme) d'enregistrements ne nuise aux performances.
Existe-t-il une meilleure façon d'implémenter ce type de logique que ce que je fais actuellement ?
Merci
Edit : Note rapide, toutes les fonctions de remplacement ne suppriment pas seulement les points et les espaces. Il y a des suppressions de chaînes de caractères, des groupes soundex, etc.