sub create_iterator{
my $val = shift;
return sub { return $val += 2;}
}
my $iter_even = create_iterator(0);
my $iter_odd = create_iterator(1);
####
sub create_iter {
my ($code_ref, @rest) = @_;
return sub {$code_ref->();}
}
##
##
my $even = create_iter(sub {my $c; $c += 2; return $c;}, 0); # Does NOT work
##
##
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;
##
##
Fibonacci:
2 3 5 8 13 21 34
##
##
my $fact = create_iter (<<'EOS'
return sub { $rest[0]++; $rest[1] *= $rest[0];};
EOS
, 1, 1);
print "\n\nFact: \n";
print $fact->(), " ", for 1..5;
##
##
Fact:
2 6 24 120 720