来自脚本的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;