use strict; use warnings; my @names = ( q{Mark K.}, q{Bob H}, q{Kurt}, q{Mary Kay K}, q{Mary Jo Z.}, q{Mary Jo}); print qq{Original Substituted Matched\n}, qq{-------- ----------- -------\n}; foreach my $name (@names) { (my $firstNameBySubs = $name) =~ s{(?:\s[A-Z]\.?)?\z}{}; my ($firstNameByMatch) = $name =~ m{^(.*?)(?:\s[A-Z]\.?)?\z}; printf qq{%-12s%-12s%-s\n} , $name , $firstNameBySubs , $firstNameByMatch; }