my $unsorted = $dbh->selectall_arrayref($FOOSQL) or die "Fooey, foo failed ($FOOSQL) $DBI::errstr\n"; for ( sort { $Q::SortBy == 1 ? ($a->[1] cmp $b->[1] or $a->[4] cmp $b->[4] or $a->[2] cmp $b->[2]) : $Q::SortBy == 2 ? ($a->[1] cmp $b->[1] or $a->[2] cmp $b->[2]) : ($b->[3] <=> $a->[3] or $a->[2] cmp $b->[2]) } map {[$_, lc $_->[5], substr($_->[4],3,3), int $_->[1], lc $_->[3]]} @$unsorted) { ## Do something with $_ here... }