Here in the Monastery, see List Processing, Filtering, and Sorting in Tutorials. See perlvar for info on the  $a $b special variables (used for other things than just sorting), perlop for the spaceship  <=> and its close cousin, the  cmp operator. Also see sort for more info on this built-in function, and the sort pragma for info on controlling it. See also A Fresh Look at Efficient Perl Sorting.

... what are these variables

 @$a   @$b

When sort-ing a list,  $a $b are aliased (see 'alias' in perlglossary) to various pairs of elements in the list to be sorted so that they may be compared and, if necessary, rearranged into sorted order (whatever 'sorted' means in a given context). If a list of array references is being sorted (as in some of the code examples),  $a $b become aliases of these references. If  $scalar is an array reference, then  @$scalar dereferences it. If an array reference is dereferenced in numeric context, then the number of elements of the array is returned.

If you are sorting a list of array references by the length of each referenced array (i.e., the number of elements in each array) as in
    my @sorted = sort { @$a <=> @$b } \(@ra1, @ra2, @rax, @ray);
@$a and  @$b in the numeric context imposed by the  <=> (spaceship) numeric comparison operator evaluate to the number of elements in their respective aliased referents.

Update: Added  @$a <=> @$b explanation.


In reply to Re^3: multiple array processing by AnomalousMonk
in thread multiple array processing by f77coder

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.