return sub {$count++}
####
sub count_maker {
my $count = shift;
##
##
{
my $count1; ## only one copy of $count1 ever created, so
## it's shared by all closures created below
sub count_maker {
my $count2 = shift; ## $count2 is a different var each time
## each time we enter count_maker
return sub { ($count2++, $count1++) }
}
}
my $c1 = count_maker(1);
my $c2 = count_maker(5);
print join " ", $c1->(), $/;
print join " ", $c2->(), $/;
print join " ", $c2->(), $/;
print join " ", $c1->(), $/;
print join " ", $c1->(), $/;
__OUTPUT__
1 0
5 1
6 2
2 3
3 4