Perl 如何将一个子例程作为参数传递给另一个子例程

Perl 如何将一个子例程作为参数传递给另一个子例程,perl,subroutine,Perl,Subroutine,我想将一个子例程作为参数传递给另一个子例程 子例程问题应作为参数传递给子例程答案?我如何使用Perl实现它 question(); sub question { print "question the term"; return(); } sub answer() { print "subroutine question is used as parameters"; return(); } 您可以使用\&subname语法获取子例程引用,然后可以轻松地将其

我想将一个子例程作为参数传递给另一个子例程

子例程
问题
应作为参数传递给子例程
答案
?我如何使用Perl实现它

question();

sub question {
    print "question the term";
    return();
}

sub answer() {
    print "subroutine question is used as parameters";
    return();
}

您可以使用
\&subname
语法获取子例程引用,然后可以轻松地将其作为标量之类的参数传递给其他子例程。这记录在和中。稍后,您可以使用取消引用

也可以通过不命名来创建匿名子例程。这可能会导致一个有趣的案例


如果我有另一个名为question1的子例程(现在我想在子例程中传递question和question1子例程,回答如何传递它),参考类似question1的问题,即
my$question1\u subref=\&question1
并将其传递给sub
answer
“它可能导致有趣的闭包案例”,这与上下文无关。这里没有闭包。在
return
之后不需要括号。更重要的是,注意
返回
(没有任何内容)实际上返回
undef
。如果你想表明一切进展顺利——这总是一个很好的主意——你通常会
返回1@zdim仅在标量中context@ysth是的,说得好,谢谢。在列表上下文中,从这个意义上讲,这是一个不同的游戏。同时删除“子答案”后面的paren。
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;
} 
my $question = sub  {
                        print "question the term";
                        return 1;
                     };
answer($question);

# you can call it using arrow operator later.
$question -> ();