in reply to Regex for Surnames

Some example code for Lingua::EN::NameParse
$correct_case = &case_surname("DE SILVA-MACNAY",$lc_prefix); # De Silv +a-MacNay
would seem to agree, but perhaps you should check out the complete description of that module?