my $call=0; sub generator (;$) { my $inner_iter=shift; my $dummy; $outer_iter=sub {}; # $outer_iter=sub { $inner_iter->() }; # $outer_iter=sub { $dummy++ }; $call++; print "Call Nr $call\n"; if ($inner_iter){ print $inner_iter."\n"; if ( $inner_iter eq $outer_iter) { print "ERROR !!!\n" } } return $outer_iter; } print generator generator; #### /usr/bin/perl -w /tmp/tst.pl Call Nr 1 Call Nr 2 CODE(0x90fa080) ERROR !!! CODE(0x90fa080) #### Call Nr 1 Call Nr 2 CODE(0x9604880) CODE(0x9623210) #### sub gen_arr { my $inner_arr=shift; print my $outer_arr=[]; return $outer_arr; } gen_arr gen_arr; #prints ARRAY(0xa179880)ARRAY(0xa179760)