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
