Think of built-in functions as subs with prototypes on steroids (whether you parse that as "(subs with prototypes) on steroids" or "subs with (prototypes on steroids)", either one is correct).

In this case, Perl is desperately trying to come up with a way to parse "sort do_nothing( @in )" in such a way as to match one of the two allowable formats. And it's getting it wrong. The bias seems to be for the "sort BLOCK EXPR" format over the "sort EXPR" format. Which largely makes sense from the abstract - "sort BLOCK EXPR" could be a subset of "sort EXPR", so we need to provide that bias.

Once we've gone down that road, do_nothing is being passed no arguments, returning an empty array in scalar context results in "0", and we end up having a block that always returns 0, and thus the input to sort is passed back out, unchanged.

With whitespace being significant in perl 6, that ambiguity goes away (to be substituted by whitespace being significant, unlike pretty much every other language).


In reply to Re: Perversity of sorts by Tanktalus
in thread Perversity of sorts by tlm

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.