my @sorted = sort { $a->{parent} <=> $b->{parent} || $a->{messageId} <=> $b->{messageId} } @$testarray; foreach (@sorted) { print "$_->{messageId}\t$_->{parent}\n"; }