%{array[0]} = { key1 => 1, key2 => 4 }; %{array[1]} = { key3 => 8, key4 => 4, key5 => 6 }; %{array[2]} = { key6 => 3 }; #### %{array[0]} = { key6 => 3 }; %{array[1]} = { key3 => 8, key4 => 1, key5 => 6 }; %{array[2]} = { key1 => 1, key2 => 24 }; #### sub SortArrayOfHashes { my @array = @{(shift)} ; my %valuesum; foreach my $i (0 .. $#array) { my $sum = 0; $sum += $_ foreach (values %{$array[$i]}); $valuesum{$i} = $sum; } my @sortedarray; foreach ( sort {$valuesum{$a} <=> $valuesum{$b} } keys %valuesum ) { push (@sortedarray, $array[$_]); } return @sortedarray; }