来自脚本的perl App::Cmd调用子命令
我试图从另一个脚本调用使用来自脚本的perl App::Cmd调用子命令,perl,command-line-arguments,Perl,Command Line Arguments,我试图从另一个脚本调用使用App::Cmd实现的命令行应用程序(无需系统调用) 我的应用程序取自软件包的,有一个脚本yourapp: #!/usr/bin/perl use YourApp; 应用程序类YourApp.pm: package YourApp; use App::Cmd::Setup -app; 1; 还有一个命令类YourApp/command/initialize.pm,带有一个选项myoption: package YourApp::Command::initialize
App::Cmd
实现的命令行应用程序(无需系统调用)
我的应用程序取自软件包的,有一个脚本yourapp
:
#!/usr/bin/perl
use YourApp;
应用程序类YourApp.pm
:
package YourApp;
use App::Cmd::Setup -app;
1;
还有一个命令类YourApp/command/initialize.pm
,带有一个选项myoption
:
package YourApp::Command::initialize;
use YourApp -command;
sub opt_spec {
return ( [ "myoption|m=s", "my option", ],);
}
sub execute {
my ($self, $opt, $args) = @_;
my $mo = $opt->myoption;
print "Options : $mo \n";
}
1;
从脚本执行子命令工作正常,调用:
/yourapp initialize--myoption aaa
打印所需结果选项:aaa
现在我想从另一个perl脚本调用execute
子例程,但当我将该选项作为哈希引用传递给execute
时,如下所示:
my $opts = {m=>"aa"};
use YourApp::Command::initialize;
YourApp::Command::initialize->execute($opts);
perl抱怨无法对未经许可的引用调用方法“myoption”
。
当通过命令调用execute
时,$opts
被祝福为Getopt::Long::Descriptive::opts::\uuuuu OPT\uuuu2
。但是,在我的脚本中,$opts
仍然会导致错误
如何从脚本调用
执行有什么提示吗?因为它是一个命令行应用程序,需要与@ARGV
交互。因此,如果您在@ARGV
中手动设置选项并调用YourApp->run
,它将读取这些选项,App::Cmd将调用execute()
是的,这对我有用!我已经看到,App::Cmd::Tester
以类似的方式实现了这一点。为什么要将ARGV声明为local
呢?噢,local
不是强制性的。我在t脚本中做了一系列测试。
use YourApp;
local @ARGV = qw( initialize --myoption aaa );
YourApp->run;