qw( A A A A )
qw( B B )
qw( C C C )
qw( D )
####
qw( A C B A D C A B C A ) # I think...
####
# Sublists generated by an iterator.
my @p1 = ( 'A' , undef, undef, 'A', undef, undef, 'A', undef, undef, 'A' );
my @p2 = ( undef, 'C', undef, undef, undef, 'C', undef, undef, undef, 'C' );
my @p3 = ( undef, undef, 'B', undef, undef, undef, undef, 'B', undef, undef );
my @p4 = ( undef, undef, undef, 'D', undef, undef, undef, undef, undef, undef );
# Now zip them up.
my @solution = grep { defined } zip @p1, @p2, @p3, @p4;
print "@solution\n";
# Produces A C B A D C A B A C