in reply to unpack - array takes too many bytes

There's only one thing a function can return: a list of scalars, so as far as the assignment is concerned,

my ($name, $onebyte, @twobytes, @fourbytes, $back2onebyte, @trailing) = unpack( "Z16 C1 C2 C4 C1 x400 C*", $data);

is the same thing as

my ($name, $onebyte, @twobytes, @fourbytes, $back2onebyte, @trailing) = ($z, $c1, $c2_0, $c2_1, $c4_0, $c4_1, $c4_2, $c4_3, ...);

How can it possibly know it should assign two (no more, no less) of those elements to @twobytes? It can't.

So what should Perl do when there's an array on the LHS of an assignment? Well, it could throw an error, but instead, it simply assigns everything else to the array. At least that makes (..., @trailing) = useful.