http://www.perlmonks.org?node_id=665251


in reply to Golf/Perlish solution to this problem?

This is just off the top of my head, and could probably be shorter. This assumes that @array is a multiple of 4 elements, and drops anything that's modulo 4:

my @array = (1 .. 8); my @other = (); while ((@array % 4) == 0) { push(@other, $array[$#array], @array[0, 1], $array[$#array - 1]); splice(@array, 0, 2); splice(@array, -2); }

If you want to handle a remainder chunk specially, you can do so after the while exits...

Edit: This is bad in that the modulo/lost elements are from the center of the list, not the end. Unless you are certain that you list is always a multiple of 4 in length, you'll definitely want to handle the remainder.

--rjray