затягивайте данные в хэш да и 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)