my @hITS; while () { chomp; my %row; @row{qw( score qID )} = ( split /\t/ )[ 0, 9 ]; push @hITS, \%row; } @hITS = sort { $b->{score} <=> $a->{score} || $a->{qID} cmp $b->{qID} } @hITS; for (@hITS) { print "score: $_->{score} qID: $_->{qID}\n"); }