如何导出%*SUB-MAIN-OPTS

Mar*_*rth 8 perl6

假设有一个模块包含sub MAIN应该提高启动速度的's'.不幸的是我无法以named-anywhere这种方式使用该功能.我的出口是破产还是我应该做什么?

use v6.c;

unit module My::Main;
our %*SUB-MAIN-OPTS is export = ( 'named-anywhere' => True);

multi sub MAIN() is export {
    say 1;
}

multi sub MAIN('a', :$pa) is export {
    say $pa;
}
Run Code Online (Sandbox Code Playgroud)

Eli*_*sen 5

您目前无法以这种方式导出动态变量,也许我们永远也不会。

同时,由于这通常是在命令行脚本的上下文中进行的,因此有一种解决方法:

# in your module:
PROCESS::<%SUB-MAIN-OPTS><named-anywhere> = True;

# in your script
dd %*SUB-MAIN-OPTS'
# Hash element = ${:named-anywhere}
Run Code Online (Sandbox Code Playgroud)

您正在执行的操作是named-anywhere%SUB-MAIN-OPTS存在于PROCESS::名称空间中的哈希中设置密钥。如果无法在堆栈的其他任何位置找到动态变量,则在外部命名空间中查找动态变量。请注意,named-anywhere如果密钥的分配尚不存在,则实际上会利用该哈希。因此,这不会干扰将来对%SUB-MAIN-OPTS哈希的任何其他添加。