How to export %*SUB-MAIN-OPTS

泄露秘密 提交于 2019-12-08 19:18:22

问题


Assuming there is a Module that contains the sub MAIN's which is supposed to improve the startup speed. Unfortunately I am unable to use the named-anywhere feature that way. Is my export broken or what am I supposed to do?

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;
}

回答1:


You cannot currently export dynamic variables that way, and maybe we never will.

In the meantime, since this is usually in the context of Command Line scripts, there is a way around this:

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

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

What you're doing there is that your setting the named-anywhere key in the %SUB-MAIN-OPTS hash that lives in the PROCESS:: namespace. That is the outer namespace in which dynamic variables are looked up if they cannot be found anywhere else in the stack. Note that the assignment to the key named-anywhere will actually vivify the hash if it doesn't exist yet. So this will not interfere with any other future additions to the %SUB-MAIN-OPTS hash.




回答2:


While you can probably export MAIN that way, you have to consider the scope of the %*SUB-MAIN-OPTS variable. It's not clear to me if you are setting the value in the module that imports or in the exporting module. In any case, just print the value within the MAIN subs to check it. I would say that, as a dynamic variable, you will have to set it in the importing module.



来源:https://stackoverflow.com/questions/53544352/how-to-export-sub-main-opts

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!