Quiero pasar una subrutina como parámetro a otra subrutina.
Subrutina question
Se debe pasar como parámetro a la subrutina. answer
? ¿Cómo puedo hacerlo con Perl?
question();
sub question {
print "question the term";
return();
}
sub answer() {
print "subroutine question is used as parameters";
return();
}
Respuestas
3 para la respuesta № 1Puede tomar referencia de subrutina usando &subname
Sintaxis y luego, puede pasarla fácilmente a otra subrutina como argumentos como un escalar. Esto está documentado en perlsub
y perlref
. Más tarde puede desreferenciarlo usando Arrow operator(->)
.
sub question {
print "question the term";
return 1;
}
my $question_subref = &question;
answer($question_subref);
sub answer {
my $question_subref = shift;
print "subroutine question is used as parameters";
# call it using arrow operator if needed
$question_subref -> ();
return 1;
}
O puede crear una subrutina anónima al no nombrarla. Puede llevar a un caso interesante de closures
my $question = sub {
print "question the term";
return 1;
};
answer($question);
# you can call it using arrow operator later.
$question -> ();