# @keys = keys %hash; # done ONCE # ($k,$v) = rhe_2(%hash,@keys); sub rhe_2 (\%\@) { my $key; do { $key = rand @keys } until exists $_[0]{$_[1][$key]}; return ($_[0]{$_[1][$key]}, delete $_[0]{$_[1][$key]}); }