Como funcionam os fechamentos no Perl?
Novato em Perl novamente aqui, tentando entenderclosure
em Perl.
Então aqui está um exemplo de código que eu não entendo:
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");
Então minhas perguntas são:
Se uma variável é atribuída a uma função, é automaticamente uma referência a essa função?Naquele código acima, posso escrever$f = \make_saying("Howdy")
em vez de? E quando posso usar o&
porque eu tentei usar isso para passar os parâmetros (&$f("world")
) mas não funciona.e por último, nesse código acima como ele fez as palavrasworld
eearthlings
é adicionado às palavrashowdy
egreetings
.Nota: Eu entendo que $ f é um pouco ligado à função com o parâmetrohowdy
então essa é a minha compreensão como oworld
foi adicionado. O que eu não entendo é a segunda função dentro. Como esse alguém opera sua mágica. Desculpe eu realmente não sei como perguntar isso.