package Getopt::Dakkar::Role::Piece; use Getopt::Dakkar::Style qw(role); # VERSION # ABSTRACT: a piece has name => ( is => 'ro', isa => Str, required => 1 ); has aliases => ( is => 'ro', isa => ArrayRef[Str], default => sub { [] } ); has matching_strings => ( is => 'lazy', isa => ArrayRef[Str], init_arg => 'matches', ); sub _build_matching_strings($self) { [ $self->name, $self->aliases->@* ] } has class => ( is => 'ro', isa => ClassName, default => 'Getopt::Dakkar::Stash' ); has object => ( is => 'ro', isa => Object ); has op => ( is => 'ro', isa => Str|CodeRef ); sub make_stash($self,$argpack) { if (my $o = $self->object) { return $o } my $class = use_module($self->class); if (my $from_argpack = $class->can('new_from_argpack')) { return $class->$from_argpack($argpack); } else { return $class->new(); } } requires qw(parse match);