my @foo = (1..15); my $n = 5; my @bar = @foo[map {$_ + $n - 1 - 2 * ($_ % $n)} (0..$#foo)]; print "@bar"; #### 5 4 3 2 1 10 9 8 7 6 15 14 13 12 11 #### my @foo = (1..15); my $n = 5; my $i = 2; my @bar = @foo[map {my $r = $_ % $n; $_ - $r + (($r + $i) % $n)} (0..$#foo)]; print "@bar"; #### 3 4 5 1 2 8 9 10 6 7 13 14 15 11 12