foreach my $col ( sort { my $aa = $products{$a}{Q} > 0 ? "A$a" : "B$a"; my $bb = $products{$b}{Q} > 0 ? "A$b" : "B$b"; ($aa <=> $bb || $aa cmp $bb) } keys %products ) {