sub recurse { if (grep /A/, @a > 1){ my @c = splice @a, 0, 2; splice @c, 1, 0, (@a, @b); } if (grep /B/, @b > 1){ my @c = splice @b, 0, 2; splice @c, 1, 0, (@a, @b); } if (grep /A/, @a == 1){ shift @a; } if (grep /B/, @b == 1){ shift @b; } }