#!/usr/bin/perl use warnings; use strict; # Note: Read a Schwartzian transform from # the bottom-up. It makes more sense. my @names = # Join the name back together. First name # output first, and then (And only if a # surname exists) a comma followed by the # surname. map {$_->[1]. ($_->[0]?", $_->[0]":'')} # Sort the arrays by lastname. sort {$a->[1] cmp $b->[1]} # Splits the name on the final spaces, creates # arrays with [firstname, lastname]. map {/(.*?)\s*(\S+)$/; [$1,$2]} # All of the output <>; print "'$_'\n" foreach @names;