map { [ $_, /(?:(\d+)\s+)?(\w)\s+(\d+):(\d+)/ ] }
####
sort {
$a->[2] cmp $b->[2] ||
( defined $a->[1] && defined $b->[1] && $a->[1] <=> $b->[1]) ||
$a->[2] <=> $b->[2] ||
$a->[3] <=> $b->[3]
}
####
sort {
$a->[2] cmp $b->[2] ||
($a->[1] || 0) <=> ($b->[1] || 0) ||
$a->[2] <=> $b->[2] ||
$a->[3] <=> $b->[3]
}
####
@sorted =
map {
$_-[0]
}
sort {
$a->[2] cmp $b->[2] ||
($a->[1] || 0) <=> ($b->[1] || 0) ||
$a->[2] <=> $b->[2] ||
$a->[3] <=> $b->[3]
}
map {
[ $_, /(?:(\d+)\s+)?(\w)\s+(\d+):(\d+)/ ]
} @unsorted;