sub counter {
my $start_value = shift;
return sub { return $start_value++; }
}
####
my $counter1 = counter(5);
my $counter2 = counter(20);
print $counter1->(), $counter1->(), $counter1->(),"\n";
print $counter2->(),"\n";
print $counter1->(),"\n";
##
##
567
20
8
##
##
sub build_one {
my($foo, $bar, $baz) = @_;
return sub {
my $quux = shift;
do_something($foo, $bar, $baz, $quux);
}
}
# Figure out first three args...
push @queue, build_one($alpha, $beta, $gamma);
# repeat as necessary.
##
##
map { $_->($last_thing) } @queue;