in reply to Parsing out first names

The part matching the last initial, followed by an optional ., needs to be anchored to the end, and you probably don't want the space before it, either.
/(.*) [a-zA-Z]\.?\z/
You also need to have the match in list context to have it return the captured substring:  my ($f_name) = $name =~ m/...

And I think you mean to have (), not [], in the assignment to @names.