It sounds like you need
String::Approx, using amatch with a modified edit distance of 3.
Tie::Hash::Approx
might be even better except that it doesn't allow you to modify the edit distance, and the default distance of 10% is too close for what you are asking for. Perhaps a hand-hacked version of it with a different compare function would do?
Modified to include CPAN refs and an additional comment.