Я использую App :: Cmd для создания своих приложений CLI.
Возможно ли реализовать подкоманду, такую как docker network inspect
?(при условии, что inspect
является подкомандой)
У меня есть следующий код для реализации команды foo bar
$ cat bin/foo
#!/usr/bin/perl
use Foo;
Foo->run;
$ cat lib/Foo.pm
package Foo;
use App::Cmd::Setup -app;
1;
$ cat lib/Foo/Command/bar.pm
package Foo::Command::bar;
use App::Cmd::Setup -command;
sub execute {
print "Hello world\n";
}
1;
Я реализовал подкоманду foo bar baz
, изменив lib/Foo/Command/bar.pm
как:
sub execute {
my ( $self, $opt, $args ) = @_;
my $subcommand = $args->[0];
if ( $subcommand eq 'baz' ) {
print "Subcommand baz is working\n";
}
...
}
Есть ли лучший способ?
Большой минус подхода $args->[0]
в том, что вы не можете автоматически сгенерировать --help
(foo bar
покажет ту же помощь, что и foo bar baz
)
Другими словами, App::Cmd
отточено для <bin_name> <command> [-?h] [long options...]
синтаксиса вызова, но мне нужен <bin_name> <command> <subcommand> [-?h] [long options...]
синтаксис.
PS Я создал Github-репозиторий для экспериментов