my %temphash; while (($key,\@val) = each %myhash) { $temphash{join sort @val} = $key; } undef %myhash; while (($key,$val) = each %temphash) { $myhash{$val} = split $key; }