El siguiente código implanta una función reduce
similar a la proveída por el módulo  List::Util  presentado
en la sección 
1.13.2.
Aunque la versión en List::Util es esencialmente similar 
en funcionalidad, es mas eficiente al estar escrita en C.
lhp@nereida:~/Lperl/src/hop/Chap7$ cat -n reduce.pl
 1  #!/usr/bin/perl -w
 2  use strict;
 3  use Scalar::Util qw(looks_like_number);
 4  use List::MoreUtils qw(all);
 5
 6  sub reduce (&@) {
 7    my $code = shift;
 8    my $val = shift;
 9    local ($a, $b);
10    for (@_) {
11      ($a, $b) = ($val, $_);
12      $val = $code->()
13    }
14    return $val;
15  }
16
17    die "\n$0 number number ...\n"
18  unless @ARGV and all { looks_like_number($_) } @ARGV;
19  my $s = reduce { $a+$b } @ARGV;
20  my $p = reduce { $a*$b } @ARGV;
21
22  print "Suma = $s, Prod = $p\n";
El uso del prototipo nos permite omitir el uso de la palabra 
reservada sub y la coma intermedia.
La localización de las variables $a y $b 
nos permite evitar la posible contaminación
de variables globales con el mismo nombre.
Casiano Rodríguez León
