package Utils;
use URI;
use List::MoreUtils qw(uniq);
use Types::Standard qw(InstanceOf);
use Moo::Role;
requires qw(list monks);
sub my_uniq {
my $self = shift;
my @result = uniq @{ $self->list };
wantarray ? @result : scalar @result;
}
has 'uri' => (
is => 'lazy',
isa => InstanceOf ['URI'],
default => sub { my $self = shift; URI->new( $self->monks ) },
handles => [qw(host)],
);
1;
__END__
####
package Karl;
use Types::Standard qw(ArrayRef Str);
use Moo;
has list => ( is => 'lazy', isa => ArrayRef );
has monks => ( is => 'lazy', isa => Str );
with qw(Utils);
1;
__END__
####
#!/usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
use Data::Dump;
use Karl;
my $monks = qq(http://www.perlmonks.org);
my $list = [qw(cuke cuke)];
my $nose = Karl->new( list => $list, monks => $monks );
dd $nose;
my $uniq = $nose->my_uniq;
say $uniq;
my @uniq = $nose->my_uniq;
say for @uniq;
say $nose->host;
__END__