这是 MooseX::Getopt 的正确(预期)使用吗? ?该文档没有很多示例。该代码有效,但我不知道这是否是预期的使用模型。
package AppOpt {
use Moose;
use Moose::Util::TypeConstraints;
use namespace::autoclean;
with 'MooseX::Getopt';
enum 'ReportType', [qw( activityByEvent activityByDate final )];
enum 'FormatType', [qw( text pretty html )];
has report => ( is => 'ro', isa => 'Str', required => 1 );
has verbose => ( is => 'ro', isa => 'Bool', default => 0 );
has format => ( is => 'ro', isa => 'Str', default => "text" );
__PACKAGE__->meta->make_immutable;
}
package main;
use strict;
use warnings;
my $opt = AppOpt->new_with_options();
printf("original \@ARGV = [%s]\n\n", join(' ', @ARGV));
# Please ignore this tasteless inspection of the object guts. -E
for my $k (keys(%{$opt})) {
unless($k =~ /(usage|ARGV|extra_argv)/) {
printf("%s => %s\n", $k, $$opt{$k});
}
}
exit(0);
具体来说:这些选项是否打算成为它们自己的类?我无法从文档中确定。
此外,使用 BUILD
进一步验证选项是否合适?
这听起来像是不止一个问题,但我并不是这个意思。我之前运行过其他模块,结果发现我误解了它们的用途。
最佳答案
角色MooseX::Getopt为与其一起使用(被使用)的类的属性(以 _
开头的属性除外)设置命令行选项。它并不打算单独“使用”。
因此,您编写一个带有属性 report
的类 AppOpt
,当您包含 MooseX::Getopt
角色时,您可以使用以下命令调用该程序--report...
,其中选项详细信息是通过尽可能多地从其类中推断属性来设置的。就是这样。您将获得命令行选项。
提供了一些访问器,可以使用它们来检查正则表达式中列出的命令行上发生的情况。但将它们用作访问器(方法),而不是直接戳对象。
关于perl - 这是 MooseX::Getopt 的正确(预期)用法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55113986/