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

标签 perl moose

这是 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/

相关文章:

perl - 从 ArrayRef[HashRef] 强制 ArrayRef[MyClass]

perl - 使用带有 CODE 引用的 Apache::Session 存储 Moose 对象的替代方法

perl - 哪些推荐的 Perl 模块可以序列化 Moose 对象?

perl - 为什么我的 Perl sysread 在从套接字读取时会阻塞?

perl - 如何在 Perl 中使用 LWP::UserAgent 获取 HTTP 响应的正文?

perl - 如何将命名迭代器与后缀 foreach 一起使用?

perl - 在 perl 中按需加载所需的包

xml - 我应该如何使用 XML::Simple 处理 undefined reference ?

windows - 在 Windows 7 中使用 Curl 获取 Https 网页

perl - 哪个 KiokuDB 后端适合我的序列化需求?