in reply to searching keywords

You don't show us the relevant code or a Short Self-Contained Code Example, so I can only guess.

Most likely you are doing a simple substring match instead of looking for word boundaries. See perlre on word boundaries, \b.

my $protein = 'NOV'; my @keywords = (qw(novice niveau november paramonov nov supernova), "h +e said 'nov'"); print "Left-matches /$protein/: $_\n" for grep { $_ =~ /\b$protein/i +} @keywords; print "Right-matches /$protein/: $_\n" for grep { $_ =~ /$protein\b/i +} @keywords; print "Contains /$protein/: $_\n" for grep { $_ =~ /$protein/i } +@keywords; print "Contains /$protein/ as word: $_\n" for grep { $_ =~ /\b$pr +otein\b/i } @keywords;