如何正确调用需要2个子程序引用的子程序?

Geo*_*Geo 3 perl subroutine

想象一下这个子程序:

sub test(&&)
{
    my $cr1 = shift;
    my $cr2 = shift;
    $cr1->();
    $cr2->();
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以称之为:test(\&sub1,\&sub2),但我怎么称它为:

test { print 1 },{ print 2 };
Run Code Online (Sandbox Code Playgroud)

如果我说子程序只需要一个&,那么发送一个块就行了.我不知道如何让它与2一起工作.

如果我尝试像那样运行它,我得到:

Not enough arguments for main::test at script.pl line 38, near "},"
Run Code Online (Sandbox Code Playgroud)

编辑:没有办法没有调用sub

yst*_*sth 12

你需要明确说出来

test( sub { print 1 }, sub { print 2 } );
Run Code Online (Sandbox Code Playgroud)

要么

test { print 1 } sub { print 2 };
Run Code Online (Sandbox Code Playgroud)

隐含的"sub"仅适用于第一个参数. http://perldoc.perl.org/perlsub.html#Prototypes:

一个&需要一个匿名子例程,如果作为第一个参数传递,则不需要sub关键字或后续逗号.

有些东西在那里使用额外的词来伪造它:

test { print 1 } against { print 2 };

sub against (&) { $_[0] }
sub test (&@) { ... }
Run Code Online (Sandbox Code Playgroud)

但我从来没有那么喜欢过.

  • @Geo:假装源过滤器不存在.忘记你曾经听说过他们. (3认同)

bdo*_*lan 8

你可以这样做:

test(sub { print 1 }, sub { print 2 });
Run Code Online (Sandbox Code Playgroud)

  • 你_have_这样做.否则它会像你试图传递两个hash-refs一样perl. (3认同)
  • @DVK,_what_? (2认同)