затягивайте данные в хэш да и foreach (sort values %hash)
если нужен массив:
@data = sort byID @data;
sub byID {
my $aa=(split(/\\|/,$b))[1];
my $ab=(split(/\\|/,$a))[1];
return ($ab <=> $aa)
}
если хочется сортировать не цифры, то надо заменить строку
return ($ab cmp $aa)