use strict; use Data::Dumper; my %hash; %hash = (key1 => [1], key2 => [1], key3 => [1]); #### push(@{$hash{key2}},4); push(@{$hash{key3}},8); push(@{$hash{key1}},7); push(@{$hash{key2}},9); $hash{key4} = [8]; push(@{$hash{key2}},9); push(@{$hash{key3}},2); #### foreach (hash key){ my $last_one = pop(@{$hash{$_}}); print "$_ $last_one \n"; } so that rtesult is going to be: key3 2 key2 9 key4 8 key1 7 and in next iteration : key2 9 key3 8 key1 1