Thank you all very much for your helpful suggestions. I combined them to form the following (which even (accidentally) managed to beat Ovid's by a hair):
mkmcconn: 4 wallclock secs ( 4.66 usr + 0.00 sys = 4.66 CPU) @ 1073.88/s (n=5000)
ovid: 7 wallclock secs ( 7.10 usr + 0.00 sys = 7.10 CPU) @ 704.13/s (n=5000)
@result1 = map{join '',@$_[0..4,6,8]}
sort{
$a->[8] cmp $b->[8]
||
($b->[7] eq '' ? 0 : $b->[7]) <=> ($a->[7] eq '' ? 0 : $a->[7]
+) # didn't manage to eliminate this without warnings
||
$a->[0] <=> $b->[0]
||
$a->[1] cmp $b->[1]
||
$a->[2] <=> $b->[2]
||
$a->[5] <=> $b->[5]
||
$a->[3] cmp $b->[3]
} map {[m/(\d+)(\D+)(\d+)(\D*)(R(\d+))(B?(\d*))(\.\w+)\s*$/] } <DATA
+>;
mkmcconn
corrected order