这是 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 中尽可能多地推断属性来设置的。而已。您将获得命令行选项。
提供了一些访问器,可以用来检查命令行上发生的事情,列在您的正则表达式中。但是将它们用作访问器(方法),而不是直接戳对象。
这是 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 中尽可能多地推断属性来设置的。而已。您将获得命令行选项。
提供了一些访问器,可以用来检查命令行上发生的事情,列在您的正则表达式中。但是将它们用作访问器(方法),而不是直接戳对象。