I'm a little late to this party but I would take either of two approaches using regular expressions. The middle initial is optional and occurs at the end of the string so you can match that with
(?:\s[A-Z]\.?)?\z and either discard it via substitution or capture a non-greedy match of everything up to it. Like this
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;
}
This produces
Original Substituted Matched
-------- ----------- -------
Mark K. Mark Mark
Bob H Bob Bob
Kurt Kurt Kurt
Mary Kay K Mary Kay Mary Kay
Mary Jo Z. Mary Jo Mary Jo
Mary Jo Mary Jo Mary Jo
Cheers,
JohnGG
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.