use strict; use warnings; sub create_iter { my ($code_string, @rest) = @_; eval $code_string; } my $fibonacci = create_iter ( ' return sub {my ($c, $d) = @rest; my $e = $c + $d; @rest = ($d, $e); return $e;} ', 1, 1); print "Fibonacci numbers: \n"; print $fibonacci->(), " ", for 1..7;