use warnings; use strict; use Data::Dumper; my %h = ( a => 1, b => 2, c => 3, d => 4, ); my @vals = values %h; my %new = map {$_ => $vals[int(rand(@vals))]} keys %h; print Dumper \%new;