¿Cómo funcionan los cierres en Perl?
Newbie en Perl otra vez aquí, tratando de entenderclosure
en perl.
Así que aquí hay un ejemplo de código que no entiendo:
sub make_saying {
my $salute = shift;
my $newfunc = sub {
my $target = shift;
print "$salute, $target!\n";
};
return $newfunc; # Return a closure
}
$f = make_saying("Howdy"); # Create a closure
$g = make_saying("Greetings"); # Create another closure
# Time passes...
$f->("world");
$g->("earthlings");
Así que mis preguntas son:
Si se asigna una variable a una función, ¿es automáticamente una referencia a esa función?En ese código anterior, puedo escribir$f = \make_saying("Howdy")
¿en lugar? Y cuando puedo usar el&
porque intenté usar eso para pasar los parámetros (&$f("world")
) pero no funciona.y por último, en ese código anterior, ¿cómo en él ** hicieron las palabrasworld
yearthlings
anexarse a las palabrashowdy
ygreetings
.Nota: entiendo que $ f está algo ligado a la función con el parámetrohowdy
así que esa es mi comprensión de cómo elworld
se anexó Lo que no entiendo es la segunda función interna. Cómo opera esa su magia. Lo siento, realmente no sé cómo preguntar esto.