重载包函数以检测没有使用参数

Overloading a package funcion to detect no arguments have been used

我正在尝试重载函数以检测没有传递任何参数:

package Documentable::CLI {

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

        our proto MAIN(|) is export { * }

        multi MAIN (
            Bool :V(:$version)
        ) {}

        multi MAIN () {
            say 'Execute "documentable --help" for more information'
        }

    }

    # no output
    Documentable::CLI::MAIN();

如果您尝试使用 multi main (*@args) {},它也不会起作用。但是,如果您删除第一个 multi MAIN 定义,一切都会顺利进行。知道如何解决吗?

签名:(Bool :V(:$version))不接受任何参数,因为参数version是可选的,而且比签名:()更具体。您可以使论点 version 成为强制性的

multi MAIN (
    Bool :V( :$version )!
) {}