[Programación]callback en perl?

Nicolás Aimetti naimetti en yahoo.com.ar
Mie Dic 30 12:46:20 ARST 2009


Angel Arancibia wrote:
> El día 30 de diciembre de 2009 01:07, Nicolás Aimetti
> <naimetti en yahoo.com.ar> escribió:
>> Hola,
>>
>> Tenés dos opciones:
>>
>> usar un closure:
>>
>> #función que invoca el callback
>> sub f {
>>   my ($puntero_a_funcion) = @_;
>>   $puntero_a_funcion->();
>> }
>>
>> #Lu`ego la invocas:
>> f ( sub {   print "Esta es una función anónima o closure\n" }  );
>>
>> #La otra opción es un puntero a una función
>>
>> sub g {
>>   print "soy g\n";
>> }
>>
>> #así se pasa el puntero
>> f( \&g );
> 
> 
> Gracias nicolas, lo resolvi con la segunda forma, el puntero a
> funcion. Ahora me surge una duda, lo implemente de la siguiente forma
> (fue un rato antes de ver tu respuesta):
> 
> ###########
> require "./detect.pl";
> use strict;
> 
> sub f{
> 	print "soy f";
> }
> 
> my $foo=detection_linux->new();
> $foo->init_detectar(&f);
> $foo->detect_test;
> ###########
> 
> En tu respuesta figura un "\" antes del &. cual es la razon para eso?
> 
> Saludos, y muchas gracias por tu tiempo.
> 
> Angel
> _______________________________________________
> Programacion mailing list
> Programacion en lugro.org.ar
> http://lugro.org.ar/mailman/listinfo/programacion
> 

El signo "&" indica que la variable es una función, es similar a lo que 
hace el signo $ con los escalares, el @ con los arrays y el % con los hash.

El operador \ devuelve una referencia (como el & en C), o sea, \$var 
devuelve una referencia a $var. Si tenés \&func devuelve una referencia 
a una función.

Saludos,
Nicolás.



Más información sobre la lista de distribución Programacion