$soundex{ $name } = soundex($1) if $name =~ m[^(?:O'|Mac|Mc)([A-Z].*$)]; #### #! perl -slw use strict; use Text::Soundex; printf "%20s : %s : %s\n", $_, m[^(?:O'|Mac|Mc)([A-Z].*$)] ? soundex($1) : soundex($_), soundex($_) for qw[ Connor O'Connor Keefe O'Keefe MacDonald McDonald Donald Donaldson O'Donnell Donagal O'Donagal ]; __END__ P:\test>test Connor : C560 : C560 O'Connor : C560 : O256 Keefe : K100 : K100 O'Keefe : K100 : O210 MacDonald : D543 : M235 McDonald : D543 : M235 Donald : D543 : D543 Donaldson : D543 : D543 O'Donnell : D540 : O354 Donagal : D524 : D524 O'Donagal : D524 : O352