以下示例按预期工作。
use 5.014;
use warnings;
package My::Items {
use Moose;
use Method::Signatures::Simple;
has 'items' => ( is => 'rw', isa => 'ArrayRef[Str]',);
method get_random {
my @itm = @{$self->items};
return undef unless( @itm );
return $itm[ int(rand(@itm)) ];
}
__PACKAGE__->meta->make_immutable();
}
package main {
my $items = My::Items->new(items => [qw(a b c d)]);
say $items->get_random for(1..5);
}
问题是:如何在不使用辅助数组get_random
的情况下重写@itm
方法。
答案 0 :(得分:2)
method get_random {
return unless @{$self->items};
return $self->items->[ int(rand(@{$self->items})) ];
}
或者如果您不介意使用引用,
method get_random {
my $itm = $self->items;
return unless @$itm;
return $itm->[ int(rand(@$itm)) ];
}