I want to be able to pass my script the path to a .rakumod
file, say <blah>/Mod.rakumod
, and be able to access the symbol table as a hash as if I'd use
d the module instead:
The module:
$ cat Mod.rakumod unit module Mod; sub bag is export { ... }
use lib <dir-containing-Mod> use Mod; say Mod::EXPORT::.keys
works, as expected, returning (ALL DEFAULT)
.
On the other hand:
use lib <dir-containing-Mod> require Mod; say Mod::EXPORT::.keys
fails with
Could not find symbol '&EXPORT' in 'Mod' in block <unit> at <blah>
This is despite the fact that even with require
, say Mod::.keys
does see EXPORT
:
use lib <dir-containing-Mod> require Mod; say Mod::.keys --- (EXPORT Mod)
I need to use require
to make this dynamic, as I don't know which module I'll want.
Edit
Thought I'd add this: I can actually think of one thing to do, but it is absolutely disgusting:
- save my module name into a variable
$mod
- have my script write another script
us
ing that module:
my $mod = <whatever> my $cd = qq:to/END/; use v6; use lib qq\|\$\*CWD\|; use $mod; say {$mod}::EXPORT::ALL::.keys; END 'aux.p6'.IO.spurt($cd);
- and then have the initial script call the auxiliary one:
shell("raku aux.p6")
https://stackoverflow.com/questions/67040798/how-do-i-access-a-modules-symbol-table-dynamically-at-runtime-in-raku April 11, 2021 at 09:56AM
没有评论:
发表评论