Z is the zip operator. It mixes the content of its two operands like a zipper does. The operator continues mixing while there are enough data in both operands.
@c = @a Z @b;
is equivalent to the following:
@c = ((@a, @b), (@a, @b), ...);
Consider another example:
my @a = ^5; # A range from 0 to 5 (excluding 5) my @b = 'a' .. 'e'; say @a Z @b;
It reveals the internal structure of the object that will be created after the Z operation:
((0 a) (1 b) (2 c) (3 d) (4 e))