Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中对随机数组项使用ArrayRef_Perl - Fatal编程技术网

在perl中对随机数组项使用ArrayRef

在perl中对随机数组项使用ArrayRef,perl,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 = @{$sel

下面的示例按预期工作

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
方法而不使用helper数组
@itm

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

好的,thx-从“良好实践”的角度来看,什么是“首选”?使用helper arrayref变量
$itm
或第一个变量?@kobame helper变量增加了可读性,数组引用不会将数组元素复制到新数组中,这与
my@itm=@{$self->items}不同