http://www.perlmonks.org?node_id=196401


in reply to regex: seperating parts of non-formatted names

Check out Lingua::EN::NameParse.

From the docs:

This module takes as input a person or persons name in free format text such as,

Mr AB & M/s CD MacNay-Smith
MR J.L. D'ANGELO
Estate Of The Late Lieutenant Colonel AB Van Der Heiden

and attempts to parse it. If successful, the name is broken down into components and useful functions can be performed such as :
converting upper or lower case values to name case (Mr AB MacNay )
creating a personalised greeting or salutation (Dear Mr MacNay )
extracting the names individual components (Mr,AB,MacNay )
determining the type of format the name is in (Mr_A_Smith )

If the name cannot be parsed you have the option of cleaning the name of bad characters, or extracting any portion that was parsed and the portion that failed.