在Perl中使用ArrayRef作为随机数组项

时间:2015-01-30 10:35:58

标签: perl

以下示例按预期工作。

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方法。

1 个答案:

答案 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)) ];
    }