1

有限配列への無限ループが必要です...

例:

@name = ('John', 'Helen', 'Dave');

1=John
2=Helen
3=Dave 
4=John
5=Helen
6=Dave 
7=John
8=Helen
9=Dave 
...etc

出来ますか?
ありがとう

4

4 に答える 4

4

なぜ誰もがそれをしたいのかわかりませんが、これはあなたが望むことをします:

my $i=0;
my $cnt=1;
my @name = ('John', 'Helen', 'Dave');

    while($i<scalar (@name )){

        print $cnt."".$name[$i];
        $i++;
        $cnt++;
        $i=$i==scalar(@name)?0:$i;


}
于 2013-05-01T19:52:04.393 に答える
4

配列のサイズを法とするインデックス番号で有限配列にインデックスを付ける必要があるかのように聞こえます。

foreach my $i (1..100) { printf "%d=%s\n", $i, $name[$i % scalar(@name)]; }

my @dow = ( 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' );
print $dow[7 % scalar(@dow)], "\n";
print $dow[125 % scalar(@dow)], "\n";

等。

于 2013-05-01T19:56:42.020 に答える
1

面白いことに、これは繰り返し値の「無限に」大きな配列を表します (各値のコピーを 1 つだけ格納します)。

use InfinitelyLoopingArray qw( );

tie my @dow_lookup, InfinitelyLoopingArray::,
   qw( Sun Mon Tue Wed Thu Fri Sat );

printf "%3d %s\n", $_, $dow_lookup[$_]
   for 0..9, 125;

含まれる場所InfinitelyLoopingArray.pm:

package InfinitelyLoopingArray;

use strict;
use warnings;

use Carp qw( croak );

sub TIEARRAY {
   my $class = shift;
   return bless([ @_ ], $class);
}

sub FETCHSIZE {
   # Largest supported array index.
   # Currently 2**31-1 or 2**63-1 depending on the build.
   return unpack('J', pack('j', -1)) >> 1;
}

sub FETCH {
   my ($self, $idx) = @_;
   croak "Negative indexes not supported" if $idx < 0;
   return $self->[$idx % @$self];
}

sub new {
   tie my @array, @_;
   return \@array;
}

1;
于 2013-05-01T20:58:17.553 に答える
0

多くの答え - もう一つ

my(@names) = ('John', 'Helen', 'Dave');
my $cnt;
while(1) {
    print ++$cnt, "=$_\n" for (@names);
}

願わくば、これで無限に十分です... :) /少なくとも$cntがオーバーフローしている間は/

于 2013-05-03T15:31:54.587 に答える