这是 MooseX::Getopt 的正确(预期)用法吗?

Is this a correct (intended) usage of MooseX::Getopt?

这是 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);

具体来说:这些选项是他们自己的 Class 吗?我无法从文档中确定。

此外,使用 BUILD 进一步验证选项是否合适?

这听起来可能不止一个问题,但我不是故意的。我之前 运行 与其他模块一起使用,只是发现我误解了它们的用途。

角色 MooseX::Getopt 为它所使用(由其使用)的 class 的属性(以 _ 开头的除外)设置命令行选项。它本身并不打算成为 "used"。

所以你写了一个 class AppOpt,属性 report,当你包含 MooseX::Getopt 角色时你可以用 --report... 调用程序,其中选项详细信息是通过从 class 中尽可能多地推断属性来设置的。而已。您将获得命令行选项。

提供了一些访问器,可以用来检查命令行上发生的事情,列在您的正则表达式中。但是将它们用作访问器(方法),而不是直接戳对象。