是否有可能将子程序原型化为$$&在perl?

时间:2011-12-03 01:11:15

标签: perl prototype

只是好奇心,我已经玩了一些原型,但似乎只允许在第一个位置使用子程序的原型&

写作时

sub test (&$$) {
    do_something;
}

并将其命名为

test {doing_something_else} 1,2;

它有效。

当我像这样原型时

sub test ($$&) {
    do_something;
}

再次将其称为

test 1,2 {doing_something_else};

它不起作用。我尝试了各种排列,但似乎没有任何表现。

我错过了什么,还是不可能?如果没有,为什么?

(我可能需要指出,我当然成功尝试了调用test(1,2,sub {foo})的选项,但它看起来并不像上面最后一个例子中的选项那样性感(为此我甚至不需要原型设计);我希望能够实现if(){} else {}等结构的语法,或者更重要的是,try()catch() {}或switch()case(){},但我想这就是为什么这些结构还没有在Perl中实现的原因)

2 个答案:

答案 0 :(得分:8)

&原型字符仅在原型中的第一个项目时才采用块形式。这只是对perl原型解析器工作方式的限制。

您始终可以使用sub关键字创建一个匿名子例程,该子例程在没有原型的任何位置都可以作为参数使用。

test 1, 2, sub {doing_something_else};

如果你真的想在没有sub的情况下编写它而不是在第一个位置,那么你可以玩Devel :: Declare来为测试子程序编写自己的解析规则(这是一个高级主题)。

答案 1 :(得分:7)

引用文档(perldoc perlsub):

  

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