sub hash_iterator { my %h = @_; return sub { each %h; } } # make_iterator my %test = (k1 => 'v1', k2 => 'v2', k3 => 'v3', 'k-last' => 'v-last'); my $it1 = hash_iterator(%test); my $it2 = hash_iterator(%test); while(<>){ print join ':',($it1->())[0,1]; print ';',join ':',($it2->())[0,1]; print ' - ',join ':',($it2->())[0,1]; print "\n"; }