Scenario
Imagine that you have a module X
whose functionalities are available to the user through a Command Line Interface. Such module doesn't do much in and of itself but it allows for other people to create plugin-like modules they can hook-up to module X
. Ideally, the plugins could be used through X
's CLI.
Thus my question:
What do you need to do in order to hook-up whatever functionality
a plugin might provide to X
's CLI?
This means the plugin would need to provide some structure describing the command, what needs to be called and hopefully a usage message for the plugin. Therefore, when you run X
's CLI, the plugin's command and help message shows up in the regular X
's CLI's help message.
Example
main.p6
:
use Hello;
use Print;
multi MAIN('goodbye') {
put 'goodbye'
}
lib/Hello.pm6
:
unit module Hello;
our %command = %(
command => 'hello',
routine => sub { return "Hello" },
help => 'print hello.'
);
lib/Print.pm6
:
unit module Print;
our %command = %(
command => 'print',
routine => sub { .print for 1..10 },
help => 'print numbers 1 through 10.'
);
The program main.p6
is a simplified version of this scenario. I'd like to integrate the information provided by both Hello.pm6
and Print.pm6
through
their respective %command
variables into two new MAIN
subs in main.p6
.
Is this possible? If so, how would I go about achieving it?