@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*$/] } ;