I would agree with
runrig that a module like Lingua::EN::NameCase would be the way to go. I would recommend, however, the following:
If you are casing names for users on a website, do it ONCE when they first enter their name. Allow them to edit their names if the casing did
not turn out perfectly. The problem is not that the module is badly written, but some people prefer a different casing.
For example, some prefer deSalvo, while others prefer DeSalvo. Best to let them maintain their own name (if that's what you're doing), right?