Perl 5.11.0 now available
Whispers of an "evil power" were heard in lines at dairy shops, in streetcars, stores, arguments, kitchens, suburban and long-distance trains, at stations large and small, in dachas and on beaches. Needless to say, truly mature and cultured people did not tell these stories about an evil power's visit to the capital. In fact, they even made fun of them and tried to talk sense into those who told them. Nevertheless, facts are facts, as they say, and cannot simply be dismissed without explanation: somebody had visited the capital. The charred cinders of Griboyedov alone, and many other things besides, confirmed it. Cultured people shared the point of view of the investigating team: it was the work of a gang of hypnotists and ventriloquists magnificently skilled in their art. - M. Bulgakov, The Master and Margarita

Perl 5.11.0 is a DEVELOPMENT release. We're making it available to you today to make it easy for you to test your software on what will eventually become Perl 5.12.

This release is the result of over two years of development by a global community of developers. You can find a list of high-profile changes in this release in the file "perl5110delta.pod" inside the release.

Its funny, but it is an ** UNAUTHORIZED RELEASE **

Replies are listed 'Best First'.
Re: Perl 5.11.0 now available
by Anonymous Monk on Oct 03, 2009 at 00:48 UTC
    Yada Yada Operator
    The yada yada operator (noted ...) is a placeholder for code. It parses without error, but when executed it throws an exception with the text Unimplemented:
    sub foo { ... } foo(); Unimplemented at <file> line <line number>.
Re: Perl 5.11.0 now available
by BrowserUk (Patriarch) on Oct 03, 2009 at 08:09 UTC

    They might want to clarify the when and where of:

    // in where clauses

    // now behaves like || in when clauses

    And maybe someone well-versed in technobabble should offer a footnote decoding highlighted terms:

    Due to the commutativity breakage, code references are no longer treated specially when appearing on the left of the ~~ operator, but like any vulgar scalar.

    Whomever served up that sentence should be hung up by his meat and two veg until he sees the error of his ways. And no, I'm not being sexist. women do not speak that way.


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      And maybe someone well-versed in technobabble should offer a footnote decoding highlighted terms:
      Due to the commutativity breakage, code references are no longer treated specially when appearing on the left of the ~~ operator, but like any vulgar scalar.
      It's hard not to suspect that you really do know what these mean, and are speaking up only as a voice for the downtrodden elsewhere; but anyway:
      Commutativity breakage
      Commutativity is the property of not depending on order (that is, the idea that things can be moved around without changing their identity—think of commuting to work). The classical instance of this is the fact that a + b = b + a for any numbers a and b; the referenced manifestation in Perl 5.10.0 was the fact that THING1 ~~ THING2 was guaranteed to work the same as THING2 ~~ THING1, whatever the things were. Since, for example, we now have
      { a => undef } ~~ sub { $_[0] eq 'a' }
      (because the test succeeds for each key) but not
      sub { $_[0] eq 'a' } ~~ { a => undef }
      (since the stringification of the subroutine * is not a key of the hash), commutativity has broken. The general idea is that the right-hand side of the match now determines the semantics of the match; such a declaration automatically violates commutativity, since it depends on order prima facie.
      vulgar scalar
      This is a bit of humour. Previously, the thing on the left-hand side of
      sub { $_[0] eq 'a' } ~~ { a => undef }
      was treated differently from the thing on the left-hand side of
      'b' ~~ { a => undef }
      even though both are scalars—the former was treated as a “more special” scalar. In Perl 5.10.1 and subsequent releases, it loses this special status and is treated just as any other scalar would be. To call it therefore ‘vulgar’ may seem unnecessary, but it is exactly the classical linguistic sense of the word, and so one should probably not be surprised to see it from a linguist.
      Whomever served up that sentence should be hung up by his meat and two veg until he sees the error of his ways.
      I think that that answer permits me to point out that, quite aside from the strange content of your sentence, it's ‘Whoever’ you want, not ‘Whomever’.

      * At least, I think that's how it works; I don't have an install on which to test. There's a note in the delta that undef no longer undergoes implicit stringification, so that

      undef ~~ \%hash
      is always false; I take that to mean, in a what-I-don't-not-say-isn't-not-true way, that other (vulgar) scalars do undergo implicit stringification.

      I'll submit a patch for s/where/when/ later todayMonday.

      If "a ~~ b" were equivalent to "b ~~ a", smart matching would be commutative. It's not equivalent, so it's not commutative. As previously mentioned in the doc, smart matching was commutative in 5.10.0. It only mattered in edge cases, and it made overloading and other factors impossibly complex to handle and/or implement.

      Vulgar means ordinary, plain, unspecial. In other words, a code ref on the LHS will be treated the same as any other scalar. It's actually redundant with the previous phrase.

        It's not equivalent, so it's not commutative.
        Vulgar means ordinary, ... It's actually redundant.

        In both cases, the problem is not with the strict interpretation of the descriptions, but rather with the inadequacy of the explanations as to their consequences.

        Most every programmer, new or old, good or mediocre, understands that x-y is different to y-x, but perhaps only 5% or so would ever describe subtraction as non-communicative. And far less as "commutatively broken".

        Beyond the value judgement that certain combinations of letters (words), are deemed vulgar in some circles, the only relatively common use of the word vulgar is "vulgar fractions". Also known as "common fractions". Which basically reduces to just "fractions".

        Neither the sentence nor the overall understanding is enhanced by the use of "vulgar" in that position. It is technical or scientific language used to convey a false impression of meaningful technical or scientific content. Which is one (of the more polite), definitions of "technobabble".


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
        In other words, a code ref on the LHS will be treated the same as any other scalar. It's actually redundant with the previous phrase.
        I don't think that it really is. UPDATE: Oops, but I'm wrong, because I misremembered the original sentence. The remainder of the post is now preserved only for posterity.

        A commutativity breakage means that there are some circumstances in which the smart match depends on order, not that the smart match is always completely determined by the right-hand member. Indeed, for example, a smatch $scalar ~~ \%hash behaves differently when $scalar happens to be a hashref or arrayref from the way it behaves for coderefs. I think there's nothing about the phrase “commutativity breakage” to indicate this, so it needs to be made explicit in the following sentence (or elsewhere).

      Though I find it amusing that you who often argue eloquently for the value of technical language are taking exception to the word "commutative", I completely agree with you that that is an awful sentence.

      It is terribly overwritten, substituting rare and complex terms where simple speech would do nicely. Why not use the word "scalar" alone? Or if emphasis was desired, why not use ordinary scalar or even plain old scalar rather than the obscure word "vulgar"? Why turn the relatively clear clause ~~ is no longer commutative into a convoluted noun phrase commutivity breakage? Due to the fact that ~~ is no longer commutative... is far more specific about what has changed and avoids the awkward noun phrase entirely.

      Perhaps all this seems to some like stylistic quibbling. However, programming language documentation is hard enough to read even when it is clearly and simply written. In the Perl community we are fortunate to have a fairly large number of people with right brained tendencies and strong verbal skills, more perhaps than other programming communities. Taking advantage of their insights to improve documentation can only be good for Perl.

      Best, beth

        It is terribly overwritten, substituting rare and complex terms where simple speech would do nicely.

        Indeed. Apparently @larry have a pronounced penchant for neologism — or perhaps I should say neosemanticism. It is something I have complained about before.

        Between the mind which plans and the hands which build, there must be a mediator... and this mediator must be the heart.
        The introduction tells all! Whispers of an "evil power" ... literature!? And its not by Tolkien!? We get it, you're well read ... wait a minute, is that book the new pumpkin?
Re: Perl 5.11.0 now available
by syphilis (Archbishop) on Oct 03, 2009 at 12:09 UTC
    I'm building with dmake and the MinGW port off gcc-3.4.5 on Win32. The actual 'dmake -f makefile.mk' ran fine, but with 'dmake test' the process has been stuck on the following for the last 15 minutes:
    ../cpan/CPANPLUS/t/05_CPANPLUS-Internals-Fetch.t .................. 1/ +?
    Doesn't seem right - is there a way to abort this particular test without aborting the rest of the test suite ?

    Cheers,
    Rob
        Maybe try to ignore CPANPLUS test files, like harness -v "-re=(?!CPANPLUS)"

        Thanks, cd'ing to the t directory and running perl harness -v "-re=(?!CPANPLUS)" seemed to do the trick.
        There were a few failures in one of the EU::MM test scripts (basic.t, iirc) - other than that, all was fine.

        Cheers,
        Rob
Re: Perl 5.11.0 now available
by marto (Cardinal) on Oct 04, 2009 at 09:35 UTC
Re: Perl 5.11.0 now available
by JadeNB (Chaplain) on Oct 03, 2009 at 15:20 UTC
    I read them both—I really did!—and I don't see any difference between the delta for Perl 5.10.1 and that for Perl 5.11.0. Can some more knowledgeable fellow spell out the difference?
      Really? They are different, perl5110delta describes the differences from 5.10.0 The all important Yada Yada operator (...) is only available in 5.11.0
        Yes, it's a good point that I neglected the poor Yada Yada operator! You prompted me to do what I should have done in the first place …. According to the all-knowing diff, aside from such obvious differences as one delta mentioning 5.10.1 where the other mentions 5.11.0, we have:
        • Unicode interpretation of … redefined.
        • Labels can't be keywords.
        • length undef = undef and a grab-bag of other small, pleasant stuff (see lines 376–408 of perl5110delta).
        • miniperl and internals stuff.
        • Changes in parsing of #line.
        • An extra method for tied filehandles.
        • The \N escape (I could have sworn I saw it in the 5.10.1 delta, but it seems not!)
        • Implicit strictures via use VERSION
        • The all-important Yada Yada operator
        Then I got too tired to read through all the module changes. :-)
Re: Perl 5.11.0 now available
by Anonymous Monk on Oct 03, 2009 at 16:03 UTC
    The announcement has made it to slashdot and ibmjones is amazed:
    It must be real good if it goes to eleven.