in reply to Style and Coding criticism requested

The output should be sorted on lastname, followed by first name to break ties on lastnames.

There's a subtle bug in the sorting trick you used, sorting on "$last,$first". The inserted comma can throw off the sort, as in the following:

my @names = ("O'Toole,Peter", "O,Ari"); my @sorted = sort @names; print join(";",@names),"\n";
This prints:
O'Toole,Peter;O,Ari

To get the correct sort order, you need something like this:

my @names = (["O'Toole","Peter"], ["O", "Ari"]); sub namesort { $a->[0] cmp $b->[0] or $a->[1] cmp $b->[1] } sub namejoin { return join(",",@{$_[0]}); } my @sorted = sort namesort @names; print join(";",namejoin($sorted[0]),namejoin($sorted[1])),"\n";
My only comment on style is that you might use more subroutines; for example the median calculation would make a nice re-usable utility function.