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
