max
deberá calcular el máximo o el mínimo
de los elementos de una lista.
El primer argumento de la función es una cadena conteniendo
el operador de comparación a usar (por ejemplo <
o >
o gt
o lt
).
Utilizamos la función eval
la cuál
recibe una cadena y evalúa la expresión Perl que representa.
~/perltesting/lhp$ cat -n max2.pl 1 #!/usr/bin/perl -w 2 use strict; 3 use List::Util qw{reduce}; 4 5 sub max { 6 my $op = (shift || "<"); 7 8 die "Error. Bad comparison operator '$op'\n" unless $op =~ m{([<>])|(gt)|(lt)}; 9 10 return undef unless @_; 11 12 my $comparison = '$a '.$op.' $b '; 13 14 no warnings 'once'; 15 return reduce { eval $comparison ? $b : $a } @_; 16 } 17 18 my $m1 = max("<", 5, 4, 9, 1, 0); 19 my $m2 = max(">",-1, -5, 0, 13, 12, 7); 20 my $m3 = max("lt",-1, "b", 0, 13, 12, 7, "a"); 21 my $m4 = max("gt",-1, "b", 0, 13, 12, 7, "a"); 22 my $m5 = max(); 23 24 print "$m1, $m2, $m3, $m4\n"; 25 26 print "$m5\n" if defined($m5);Sigue un ejemplo de ejecución:
~/perltesting/lhp$ perl5.10.0 max2.pl 9, -5, b, -1 ~/perltesting/lhp$
Casiano Rodríguez León