my @keys = keys(%foo); my $each = sub { return if not @keys; my $key = shift(@keys); return ($key, $foo{$key}); }; while (my ($key, $val) = $each->()) { ... }