我正在尝试从另一个脚本调用使用App::Cmd
实现的命令行应用程序(没有系统调用)。
我的应用程序来自包的tutorial,有一个脚本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
打印所需的结果Options : aaa
。
现在我想从另一个perl脚本调用execute
子例程,但当我将该选项作为哈希引用传递给execute
时,如下所示:
my $opts = {m=>"aa"};
use YourApp::Command::initialize;
YourApp::Command::initialize->execute($opts);
perl抱怨Can't call method "myoption" on unblessed reference
。
通过该命令致电execute
时,$opts
将被祝福为Getopt::Long::Descriptive::Opts::__OPT__::2
。但是,在我的脚本中祝福$opts
仍会导致错误。
如何从脚本中调用execute
的任何提示?
答案 0 :(得分:1)
因为它是一个命令行应用程序,所以需要与@ARGV
进行交互。因此,如果您在@ARGV
中手动设置选项并调用YourApp->run
,则会读取这些选项,App :: Cmd将调用execute()
。
use YourApp;
local @ARGV = qw( initialize --myoption aaa );
YourApp->run;