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