[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