use List::Util qw(reduce); sub reduce_c (&) { my $block = shift(); return sub {&reduce($block, @_)}} my $plus = reduce_c {$a+$b}; print $plus->(1,2,3,4,5), "\n"; *tajms = reduce_c {$a*$b}; print tajms(1,2,3,4,5), "\n";