my @data = sort { $a->[7] cmp $b->[7] || $b->[6] <=> $a->[6] || # '' == 0 $a->[0] <=> $b->[0] || $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] || $a->[4] cmp $b->[4] || $a->[3] cmp $b->[3] } map { [ /^(\d+)(\D+)(\d+)(\D*)R(\d+)(B?)(\d*)\.(\w+)$/ ] } ; print "$_->[0]$_->[1]$_->[2]$_->[3]R$_->[4]$_->[5]$_->[6].$_->[7]\n" for @data;