use strict; use warnings; sub assign_if_higher { $_[0] = $_[1] if $_[0] < $_[1]; } my $size = 10; my @ranges = ( [ 1, 3 ], # 1-based [ 2, 7 ], [ 10, 2 ], ); my @genome = (1) x $size; for (@ranges) { my $s = $_->[0] - 1; # 0-based my $e = $_->[1] - 1; my $m = ($e - $s) % $size / 2; my $x = 3; for (0..$m) { assign_if_higher($genome[($s + $_) % $size], $x); assign_if_higher($genome[($e - $_) % $size], $x); $x += 2; } } print(join(' ', @genome), "\n");