sub reduce (&$@) { my $code = shift; local $a = shift;
for (@_) { local $b = $_; $a = &$code; }
$a; }
(&$@)?!
local?!
Why $a and $b?