while ( ($k,$v) = each %set2 ){ $set1{$k} = undef ; # or perhaps more useful, ++ } # or to merge two and leave them both intact. my %merged = () foreach $hashref ( \%set1, \%set2 ) { while (($k, $v) = each %$hashref) { $merged{$k} = $v; } }