Вам не нужно выполнять обе операции за один раз, используя одну и ту же функцию. Иногда выполнение действий по отдельности может быть более понятным. То есть сначала разделите, а затем удалите пробелы из каждого элемента (а затем отсортируйте результат):
@email_list =
sort(
map {
s/\s*(\S+)\s*/\1/; $_
}
split ';', $file_data
);
РЕДАКТИРОВАТЬ: удаление более одной части строки одновременно может привести к ошибкам, например, Ниже указывается Синан о том, как оставить пробелы в части "Элизабет". Я закодировал этот фрагмент с предположением, что у имени не будет внутреннего пробела, что на самом деле совершенно неверно и выглядело бы как неправильное, если бы я его сознательно заметил. Код значительно улучшен (и также более читабелен) ниже:
@email_list =
sort(
map {
s/^\s+//; # strip leading spaces
s/\s+$//; # strip trailing spaces
$_ # return the modified string
}
split ';', $file_data
);