如何配置perl App :: Cmd模块以抱怨错误的选项

时间:2013-06-14 15:53:11

标签: perl cpan

我正在尝试使用perl App::Cmd模块,并且一个简单的测试程序可以正常工作。

但是,如果我使用--option运行程序,我没有在opt_spec中配置 函数(我正在调用的子命令),它不会抱怨无效选项。我希望它能这样做。相反,它只是默默地忽略了这个选择。

我无法看到配置App :: Cmd来抱怨无效选项。

这是可能的,还是每个子命令都要进行自我检查?

由于

1 个答案:

答案 0 :(得分:1)

根据 App::Cmd 教程 https://metacpan.org/dist/App-Cmd/view/lib/App/Cmd/Tutorial.pod 参数由 Getopt::Long::Descriptive (GLD) 处理(检查参数和选项部分 https://metacpan.org/dist/App-Cmd/view/lib/App/Cmd/Tutorial.pod#Arguments-and-Options

例如,jobstatus 是一个命令需要的作业 id 作为参数

<块引用>

mycli jobstatus -j 1111 或 mycli jobstatus --jobid 1111 # 有效的命令选项

sub opt_spec {
  # check https://metacpan.org/pod/Getopt::Long#Summary-of-Option-Specifications
  return (
    [ "jobid|j=i",  "specify job id" ],
  );
}

sub validate_args {
  my ($self, $opt, $args) = @_;
  # The $opt object will be a dynamically-generated subclass of Getopt::Long::Descriptive::Opts. In brief, each of the options in @opt_spec becomes an accessor method on the object, using the first-given name, with dashes converted to underscores.
  # So object $opt->jobid parameter value is 1111 (jobid 1111 consider as option) and -k consider as argument
  $self->usage_error("Please verify given arguments @$args \n") if @$args;
}
<块引用>

输出

> perl mycli jobstatus -j 1111 -k
> Error: Please verify given arguments -k

Usage: mycli <command> [-?h] [long options...]
        -? -h --help  show help

mycli jobstatus [-j] [long options...]
        -j INT --jobid INT  specify job id