【发布时间】:2015-05-02 21:01:48
【问题描述】:
我正在尝试从另一个脚本(没有系统调用)调用使用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?
【问题讨论】:
标签: perl command-line-arguments