my %hash = ( foo => 2, bar => 1, baz => 3, bun => 2, ); my @array = sort {$hash{$a} <=> $hash{$b}} keys %hash; #### my @array_of_hashes; push @array_of_hashes, {key => $_, value => $hash{$_}} for @sorted; #### use Data::Dumper; print Dumper(\@array_of_hashes); #### $VAR1 = [ { 'value' => 1, 'key' => 'bar' }, { 'value' => 2, 'key' => 'bun' }, { 'value' => 2, 'key' => 'foo' }, { 'value' => 3, 'key' => 'baz' } ];