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.