/ / Cómo pasar una subrutina como parámetro a otra subrutina - perl, subrutina

Cómo pasar una subrutina como parámetro a otra subrutina - perl, subrutina

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 № 1

Puede 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 -> ();