[Perl] Fragmento de un closure ...

Manuel Rabade mig@mig-29.net
Mon, 13 Oct 2003 22:57:08 -0500


On Mon, Oct 13, 2003 at 09:35:09PM -0500, Sergio Rojas wrote:
> Saludos Perleros!
> 
> Tengo el siguiente fragmento de un closure:
> 
> 1 sub plantilla{
> 2    my $x = $_[0];
> 3    return sub {
> 4	print "$x $_[0] \n";
> 5    }   	
> 6 }	
> 
> 
> La pregunta es: porque el escalar $x conserva su valor en las lineas
> 2 y 4, y el elemento del arreglo $_[0] no. Se sobreescribe o algo asi
> al llamar la subrutina anidada?
> 

Poruque el arreglo @_ contiene los parametros pasados a una subrutina y al
invocar 'sub' se limpia @_ y se le cargan los valores que le pasas, en este caso
ninguno.

Ademas por el ambito de $x conservara su valor en todo el bloque en el que fue
declarada (de la linea 1 a 6).

Corrijanme si me equivoco gurus de la lista :-P.

Saludos