{ my $value; my $hash_ref; my $done; sub get_key { unless ($done) { (my $key, $value) = each %$hash_ref or # yes, $value is out of scope $done = 1; } defined $key ? $key : ""; } sub get_value { defined $value ? $value : ""; } sub set_hash { $hash_ref = shift; keys %$hash_ref; # reset each() $done = 0; } } set_hash(\%hash_you_want_to_scan); write STDOUT; format STDOUT = @>>>>> @### @>>>>> @### ~~ get_key(), get_value(), get_key(), get_value() .