#!/usr/bin/perl
#
# eg12: 2nd iterator example, two counters
#

use strict;
use warnings;
use Function::Parameters qw(:strict);

#
# my $f = makecounter( $n ):
#	Make an iterator that counts from $n upwards
#	forever..  each returned function (code ref)
#	has it's own PRIVATE $n variable [closure
#	environment] which the function is free to modify.
#
fun makecounter($n)
{
	return fun { return $n++ };
}

my $c1 = makecounter( 10 );
my $c2 = makecounter( 100 );

my $v = $c1->(); print "c1: $v\n";
$v = $c1->(); print "c1: $v\n";
$v = $c2->(); print "c2: $v\n";
$v = $c1->(); print "c1: $v\n";
$v = $c2->(); print "c2: $v\n";
$v = $c1->(); print "c1: $v\n";
