package My;
use Moose;
has list => ( is => 'rw',
isa => 'ArrayRef[Str]',
);
####
my $obj = 'My'->new(list => [qw[ a b c ]]);
$obj->list([ map uc, @{ $obj->list } ]);
####
package My;
use Moose;
has list => ( is => 'rw',
isa => 'ArrayRef[Str]',
traits => [qw[ Array ]],
handles => {
add_to_list => 'push',
list_elements => 'elements',
map_list => 'map'
},
);
####
$obj->list([ $obj->map_list(sub { uc }) ]);
####
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
{ package Array::Apply;
use Moose::Role;
before install_accessors => sub {
my $class = shift;
my $name = $class->name;
my $method = "apply_to_$name";
$class->associated_class->add_method(
$method => sub {
my ($self, $code) = @_;
$_ = $code->($_) for @{ $self->$name };
}
);
};
}
{ package My;
use Moose;
has list => ( is => 'rw',
isa => 'ArrayRef[Str]',
default => sub { [] },
traits => [qw[ Array Array::Apply ]],
handles => {
add_to_list => 'push',
list_elements => 'elements',
},
);
__PACKAGE__->meta->make_immutable;
}
my $obj = My->new;
$obj->add_to_list(qw( a b c ));
$obj->apply_to_list(sub { uc });
say for $obj->list_elements;
####
handles => {
add_to_list => 'push',
list_elements => 'elements',
apply_to_list => 'apply',
},
####
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,