関数を作り出す関数...それが高階関数

# curry.pl
 
sub curry {
	my $func = shift;
	my @capture_arg = @_;
	return sub { return $func->(@capture_arg, @_); }
}
 
 
my $for_print = sub { print "@_\n"; };


 
my $printer = curry($for_print, "Hello,"); # 引数をキャプチャする
$printer->("world!");
$printer->("perl!");


 

 
my $for_multiply = sub {
	           $answer = 1;
	           for (@_) { $answer *= $_; }
	           return $answer;
               };

print $for_multiply->(2, 3, 4), "\n";


 
my $multipler = curry($for_multiply, 10); # 引数をキャプチャする
print $multipler->(5), "\n";