多个MAIN签名

时间:2019-07-13 10:23:56

标签: signature perl6

我有一个包含多个main的软件包,并且我想定义几个选项:

我的代码是这样的:

package Perl6::Documentable::CLI {
    proto MAIN(|) is export {*}
    my %*SUB-MAIN-OPTS = :named-everywhere;

    multi MAIN(
        "setup"
    ) { ... }

    multi MAIN (
        "start"                           ,
        Str  :$topdir              = "doc",
        Bool :v(:verbose($v))      = False
    ) { ... }

但是当我尝试使用以下命令实际执行它时:

perl6 -Ilib bin/documentable start -v --topdir=ss

它输出以下行:

Usage:
  bin/documentable [--topdir=<Str>] [-v|--verbose] start

我正在使用%* SUB-MAIN-OPTS,但看起来两者都不起作用。

1 个答案:

答案 0 :(得分:10)

最简单的解决方案是导出动态变量%*SUB-MAIN-OPTS,但这仍未完全实现:导出工作有点儿,但最终是一个空哈希。所以不是很有用。

Rakudo决定要运行的RUN-MAIN子程序时,将调用名为MAIN的子例程。您实际上可以从模块中导出RUN-MAIN,并设置动态变量,然后调用原始的RUN-MAIN

sub RUN-MAIN(|c) is export {
    my %*SUB-MAIN-OPTS = :named-anywhere;
    CORE::<&RUN-MAIN>(|c)
}

有关RUN-MAIN的更多信息,请参见:https://docs.perl6.org/language/create-cli#index-entry-RUN-MAIN