while (my ($key, $value) = delete_first %hash) { do_stuff(\%hash, $key, $value); $subset{$key} = $value if valid($key); }