関数を作り出す関数...それが高階関数
# 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";