Character recognition is a subset of the more general problem of pattern recognition. The programming language really doesn't matter - Perl is about as good as any other language. My hunch would be that C can be tuned for performance but for exploratory purposes, whatever PL you're comfortable with will suffice.

Pattern recognition is not a solved problem. There are algorithms that can be used for specialized domains. And you can get 2/3rds recognition in a lot of instances, but getting that last third gets exponentially more difficult. Comparing grids of bits with another grid of bits in a lookup table has the problem that the lookup table would have to be enormous. Using pixels has the problem in that you can't know a priori where one character starts and the next ends (they may even overlap). And the pixels set for a particular pattern can have many sizes and distortions (hand written is much harder than typeset).

There is long history of studying pattern recognition. Best bet would be to locate an open source project that does character recognition. I can't recall the name of the one I looked at, but the quality of recognition wasn't quite high enough in correct recognition for the project I had in mind.