Сорри, я не проверял - просто давал общую идею решения проблемы. По-красивому (сортировка по любому полю) можно сделать так:

Код:
sub sortfunc {
my ($a,$b,$i) = @_;
my @am = split(/\|/,$a);
my @bm = split(/\|/,$b);
if ($am[$i] lt $bm[$i]) {
return -1;
} elsif ($am[$i] gt $bm[$i]) {
return 1;
} else {
return 0;
}
}
.................
sort {&sortfunc($a,$b,1)} @massiv
.................
Где 1 - номер поля по которому сортируем (начиная естессно с нуля).