#!perl use strict; use warnings; my @names = ( 'J Q', 'G Gordon', 'Mary Jane', 'Tommy K', 'Madonna', 'George W.', 'Jacques-Yves'); foreach my $name (@names){ my @nl = split(/\s+/, $name); my @list = grep { ! /^[A-Z][^A-Z]*$/i} @nl; pop(@nl) if (@list and $#nl > 0 and $nl[-1] =~ /^[A-Za-z][^A-Za-z]*$/); $name = join(' ', @nl); } print join("\n", @names) . "\n"; #### J Q G Gordon Mary Jane Tommy Madonna George Jacques-Yves