use Data::Dumper; $hash = { 'user1' => { 'oldpassword' => 0, 'filesize' => '14360', 'logins' => 1 }, 'user2' => { 'oldpassword' => 0, 'filesize' => '1220', 'logins' => 15 }, 'user3' => { 'oldpassword' => 1, 'filesize' => '1780', 'logins' => 7 } }; sub KeysByLogins { my $hash = shift; map { $_->[1] } sort { $a->[0] <=> $b->[0] } map { [ $hash{$_}->{logins}, $_ ] } keys %$hash; } our @keys = KeysByLogins($hash); foreach my $key (@keys) { print Data::Dumper->Dump([$hash->{$key}], [$key]) . "\n"; # number 1 #print Data::Dumper->Dump([$hash{$key}], [$key]) . "\n"; # number 2 } print $::{hash}. ' ', $::{keys}; #### $user1 = { 'filesize' => '14360', 'oldpassword' => 0, 'logins' => 1 }; $user3 = { 'filesize' => '1780', 'oldpassword' => 1, 'logins' => 7 }; $user2 = { 'filesize' => '1220', 'oldpassword' => 0, 'logins' => 15 }; *main::hash *main::keys