#!/usr/bin/perl
#
# eg10: 2nd closure example - timesn(N) function factory
#

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

#
# my $f = timesn( $n ):
#	returns a function (code ref) which will
#	(when called) multiple it's argument by $n
#
fun timesn($n)
{
	return fun ($x) { return $n * $x };
}

my $doubler = timesn(2);
my $tripler = timesn(3);

foreach my $arg (@ARGV)
{
	my $f = $arg%2 == 1 ? $doubler : $tripler;
	my $x = $f->($arg);
	print "f->($arg)=$x\n";
}
