如何导出%* SUB-MAIN-OPTS

时间:2018-11-29 17:16:40

标签: perl6

假定有一个包含sub MAIN的模块,可以提高启动速度。不幸的是,我无法以这种方式使用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;
}

3 个答案:

答案 0 :(得分:4)

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

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

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

# in your script
dd %*SUB-MAIN-OPTS'
# Hash element = ${:named-anywhere}

您正在做的是在named-anywhere命名空间中的%SUB-MAIN-OPTS哈希中设置PROCESS::键。如果无法在堆栈的其他任何位置找到动态变量,则在外部命名空间中查找动态变量。请注意,如果密钥named-anywhere的赋值尚不存在,则实际上将使其散列。因此,这不会干扰以后在%SUB-MAIN-OPTS哈希中添加任何其他内容。

答案 1 :(得分:3)

通常,我不会将MAIN子目录放置在外部文件中,而是有一个脚本引用了外部文件中的函数。

答案 2 :(得分:3)

虽然您可以以这种方式导出MAIN,但必须考虑%*SUB-MAIN-OPTS variable的范围。我不清楚是要在导入模块中还是在导出模块中设置值。无论如何,只要在MAIN子项中打印该值即可进行检查。我想说,作为动态变量,您必须在导入模块中进行设置。