#!/usr/local/bin/perl -w use strict; my %hash_you_want_to_scan = ('kudra' => 1, 'neshura' => 2, 'Ozymandias' => 3, 'merlyn' => 4, ); { my $value; my $hash_ref; my $done; sub get_key { my $key; unless ($done) { ($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() . #### sub get_key { my $key; unless ($done) { ($key, my $value) = each %$hash_ref or # yes, $value is out of scope $done = 1; } defined $key ? $key : ""; } #### format STDOUT = @>>>>> @### @>>>>> @### ~~ get_key(), get_value(), get_key(), get_value() .