next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Clausuras y Generación de Sup: Referencias Ant: Prototipos Err: Si hallas una errata ...


Clausuras

El concepto de clausura es una noción que viene del mundo de la programación en Lisp. Se refiere a que cuando se define una subrutina en un determinado contexto léxico, se ejecuta usando ese contexto incluso si es llamada fuera de ese contexto.

En Perl una clausura es una subrutina que referencia a una o mas variables léxicas declaradas fuera de la subrutina. Por ejemplo:

  1 #!/usr/local/bin/perl5.8.0 -w
  2
  3 local $name = "Red Hat";
  4 {
  5   my $name = "Debian";
  6
  7   sub print_my_name {
  8     print $name, "\n";
  9   }
 10 }
 11
 12 print $name,"\n";
 13 print_my_name;
cuando se ejecuta produce la siguiente salida:
$ ./closure.pl
Red Hat
Debian

En condiciones normales Perl liberaría la memoria correspondiente a la variable name al final de su ámbito. Sin embargo, la subrutina print_my_name que la usa continúa visible y, por tanto, Perl conserva la variable name mientras la rutina este en uso. Obsérvese que la única forma de acceder a name es a través de la subrutina print_my_name.

Esta es la característica de una clausura: una subrutina que preserva las variables léxicas que esta usando, incluso si estas resultan invisibles desde cualquier otra parte.



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