2013-05-01 6 views
1

Мне нужен бесконечный цикл в конечном массиве ...Perl: массив бесконечных циклов?

Пример:

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

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

Возможно ли это?
Благодаря

+0

Я не понимаю, о чем вы спрашиваете. – djechlin

+0

Здравствуйте, мне нужен «бесконечный цикл» и знаю, например, имя для 7-го дня или имя для 125-дневного. Спасибо – SmV

+0

Я все еще не понимаю, о чем вы спрашиваете. – djechlin

ответ

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"; 

Etc.

+0

Отлично! благодаря – SmV

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; 


} 
+1

'$ C++;' должно быть '$ cnt ++;'. – speakr

+0

@speakr хороший ловушка! Спасибо! – isJustMe

+0

Спасибо, например! – SmV

1

Для удовольствия, это представляет «бесконечно» большой массив повторяющихся значений (в то время как только Stor по одной копии каждого значения).

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; 
0

много ответов - так еще один

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

надежда, что это достаточно бесконечна ... :)/по крайней мере, в то время как $ УНТ наложение/

Смежные вопросы