来自脚本的perl App :: Cmd call子命令

时间:2015-03-02 13:29:17

标签: perl command-line-arguments

我正在尝试从另一个脚本调用使用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的任何提示?

1 个答案:

答案 0 :(得分:1)

因为它是一个命令行应用程序,所以需要与@ARGV进行交互。因此,如果您在@ARGV中手动设置选项并调用YourApp->run,则会读取这些选项,App :: Cmd将调用execute()

use YourApp;
local @ARGV = qw( initialize --myoption aaa );
YourApp->run;