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;
}
Generally I'd not put the
MAIN
subs in an external file but have a script that references functions in an external file instead.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:
What you're doing there is that your setting the
named-anywhere
key in the%SUB-MAIN-OPTS
hash that lives in thePROCESS::
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 keynamed-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.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 theMAIN
subs to check it. I would say that, as a dynamic variable, you will have to set it in the importing module.