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.


In reply to Re: unpack - array takes too many bytes by ikegami
in thread unpack - array takes too many bytes by jjap

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.