use*_*056 6 perl command-line perl-module
来自FMc的更新
我正在对这个问题给予赏金,因为我对同样的问题感到困惑.要重新解释这个问题,如何实现应用程序级选项(适用于整个程序的选项script.pl),而不是适用于单个命令的选项(search在本例中).
原来的问题
如何使用App :: Cmd创建这样的界面
script.pl --config <file> search --options args
Run Code Online (Sandbox Code Playgroud)
?
我可以:
./script.pl search --options args
./script.pl search args
./script.pl search --options
Run Code Online (Sandbox Code Playgroud)
我想要实现的是获取配置文件的选项,如下所示:
./script.pl --config file.conf search --options args
Run Code Online (Sandbox Code Playgroud)
我已经看过cpan 上的App :: Cmd :: Tutorial,但到目前为止我还没有运气好.
您可以在App :: Cmd中指定全局选项,如下所示.我们需要三个文件:
script.pl:
use Tool;
Tool->run;
Run Code Online (Sandbox Code Playgroud)
Tool.pm:
package Tool;
use strict; use warnings;
use base 'App::Cmd';
sub global_opt_spec {
['config=s' => "Specify configuration file"];
}
1;
Run Code Online (Sandbox Code Playgroud)
和工具/命令/ search.pm:
package Tool::Command::search;
use strict; use warnings;
use base 'App::Cmd::Command';
sub opt_spec {
["option" => "switch on something"],
}
sub execute {
my ($self, $opt, $args) = @_;
warn "Running some action\n";
warn 'Config file = ' . $self->app->global_options->{config}, "\n";
warn 'Option = ' . $opt->{option}, "\n";
}
1;
Run Code Online (Sandbox Code Playgroud)
该示例显示如何定义全局选项并从search操作中访问它.