my $AoH = [ sort { $a->{under} <=> $b->{undef} || $a->{order} <=> $b->{order} } @$sqldata ]; #### (2 <=> 2) == 0 so 0 || 2 <=> 1 evaluates to 2 <=> 1 (2 <=> 1) == 1 # the answer we wanted #### select ... order by under, order;