next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Anidamiento de subrutinas Sup: Clausuras Ant: Clausuras Err: Si hallas una errata ...

Clausuras y Generación de Funciones Similares

Las clausuras pueden ser un buen mecanismo para generar dinámicamente una familia de funciones que se diferencian en algún parámetro. El siguiente ejemplo está tomado de la documentación de Perl (perldoc perlref). Se quieren esribir diversas funciones, una por cada color, de manera que devuelvan el texto HTML que pone en el correspondient color la cadena que se les pase como parámetro:
$ cat -n colors.pl
     1  #!/usr/bin/perl -w
     2  use strict;
     3
     4  my @colors = qw(red blue green yellow orange purple violet);
     5  for my $name (@colors) {
     6  no strict 'refs';       # permitir la manipulación de la tabla de símbolos
     7  *$name = *{uc $name} = sub { "<FONT COLOR='$name'>@_</FONT>" };
     8  }
     9
    10  print "¡Tenga ", red("cuidado"), "con esa ", green("luz!"),"\n";
    11  print "¡Tenga ", RED("cuidado"), "con esa ", GREEN("luz!"),"\n";
La clausura se forma en la línea 7 con la variable léxica $name declarada en la línea 5. Se han usado typeglobs para instalar entradas en la tabla de símbolos a la función tanto en minúsculas como en mayúsculas. Al ejecutar este programa tenemos la salida:
$ ./colors.pl
¡Tenga <FONT COLOR='red'>cuidado</FONT>con esa <FONT COLOR='green'>luz!</FONT>
¡Tenga <FONT COLOR='red'>cuidado</FONT>con esa <FONT COLOR='green'>luz!</FONT>


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Anidamiento de subrutinas Sup: Clausuras Ant: Clausuras Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21