|
|
Subscribe / Log in / New account

perl v5.40.0 released

Version 5.40.0 of the Perl language has been released. "Perl 5.40.0 represents approximately 11 months of development since Perl 5.38.0 and contains approximately 160,000 lines of changes across 1,500 files from 75 authors". Significant changes include a new __CLASS__ keyword, a :reader attribute for field variables, a new "^^" logical-XOR operator (because two of those were not enough), moving "try/catch" out of the experimental category, and more; see this page for lots of details.


From:  Graham Knop <haarg-AT-haarg.org>
To:  Perl5 Porters <perl5-porters-AT-perl.org>
Subject:  perl v5.40.0 is now available
Date:  Sun, 09 Jun 2024 22:58:16 +0200
Message-ID:  <CAM=m89HmOkANJ5==o7P=ZgVoPcr5RRbrRA2__W+P0cZiK3hUWw@mail.gmail.com>
Cc:  noc-AT-metacpan.org

  “What’s your name,” Coraline asked the cat. “Look, I’m Coraline. Okay?”
  “Cats don’t have names,” it said.
  “No?” said Coraline.
  “No,” said the cat. “Now you people have names. That’s because you
don’t know who you are. We know who we are, so we don’t need names.”

    -- Neil Gaiman, Coraline

We are happy to announce version 5.40.0, the first release of version
5.40 of Perl.

You will soon be able to download Perl 5.40.0 from your
favorite CPAN mirror or find it at:

https://metacpan.org/release/HAARG/perl-5.40.0/

SHA256 digests for this release are:

  c740348f357396327a9795d3e8323bafd0fe8a5c7835fc1cbaba0cc8dfe7161f
perl-5.40.0.tar.gz
  d5325300ad267624cb0b7d512cfdfcd74fa7fe00c455c5b51a6bd53e5e199ef9
perl-5.40.0.tar.xz

You can find a full list of changes in the file "perldelta.pod" located in
the "pod" directory inside the release and on the web at

https://metacpan.org/release/HAARG/perl-5.40.0/view/pod/p...

Perl 5.40.0 represents approximately 11 months of development since Perl
5.38.0 and contains approximately 160,000 lines of changes across 1,500
files from 75 authors.

Excluding auto-generated files, documentation and release tools, there were
approximately 110,000 lines of changes to 1,200 .pm, .t, .c and .h files.

Perl continues to flourish into its fourth decade thanks to a vibrant
community of users and developers. The following people are known to have
contributed the improvements that became Perl 5.40.0:

Abe Timmerman, Alexander Kanavin, Amory Meltzer, Aristotle Pagaltzis, Arne
Johannessen, Beckett Normington, Bernard Quatermass, Bernd, Bruno Meneguele,
Chad Granum, Chris 'BinGOs' Williams, Christoph Lamprecht, Craig A. Berry,
Dagfinn Ilmari Mannsåker, Dan Book, Dan Church, Daniel Böhmer, Dan
Jacobson, Dan Kogai, David Golden, David Mitchell, E. Choroba, Elvin
Aslanov, Erik Huelsmann, Eugen Konkov, Gianni Ceccarelli, Graham Knop, Greg
Kennedy, guoguangwu, Hauke D, H.Merijn Brand, Hugo van der Sanden, iabyn,
Jake Hamby, Jakub Wilk, James E Keenan, James Raspass, Joe McMahon, Johan
Vromans, John Karr, Karen Etheridge, Karl Williamson, Leon Timmermans, Lukas
Mai, Marco Fontani, Marek Rouchal, Martijn Lievaart, Mathias Kende, Matthew
Horsfall, Max Maischein, Nicolas Mendoza, Nicolas R, OpossumPetya, Paul
Evans, Paul Marquess, Peter John Acklam, Philippe Bruhat (BooK), Raul E
Rangel, Renee Baecker, Ricardo Signes, Richard Leach, Scott Baker, Sevan
Janiyan, Sisyphus, Steve Hay, TAKAI Kousuke, Todd Rinaldo, Tomasz Konojacki,
Tom Hughes, Tony Cook, William Lyu, x-yuri, Yves Orton, Zakariyya Mughal,
Дилян Палаузов.

The list above is almost certainly incomplete as it is automatically
generated from version control history. In particular, it does not include
the names of the (very much appreciated) contributors who reported issues to
the Perl bug tracker.

Many of the changes included in this version originated in the CPAN modules
included in Perl's core. We're grateful to the entire CPAN community for
helping Perl to flourish.

For a more complete list of all of Perl's historical contributors, please
see the AUTHORS file in the Perl source distribution.

We expect to make the first development snapshot of perl v5.41 on
June 20th, 2024.  The next major stable release of Perl should appear
in the first half of 2025.


to post comments

Logical XOR

Posted Jun 10, 2024 16:08 UTC (Mon) by rweikusat2 (subscriber, #117920) [Link] (18 responses)

^^ is the XOR equivalent to || and &&. Does anybody have an idea what that could be good for? I've certainly never missed it.

Logical XOR

Posted Jun 10, 2024 16:38 UTC (Mon) by proski (subscriber, #104) [Link]

I wonder if the quote in the announcement email is inspired by the "cat operator" ^^

Logical XOR

Posted Jun 10, 2024 16:53 UTC (Mon) by jccleaver (guest, #127418) [Link] (7 responses)

As syntactic sugar, it's helpful for clearing up a few logic flows. While it'll be a while before one could say this will be *clearer*, once folks are familiar with it it will let you make more legible lines.

Logical XOR

Posted Jun 10, 2024 17:19 UTC (Mon) by pbonzini (subscriber, #60935) [Link] (6 responses)

But why can't you use == or != for logical XNOR and XOR respectively? XOR and XNOR can't be short-circuited anyway.

Logical XOR

Posted Jun 10, 2024 18:20 UTC (Mon) by smurf (subscriber, #17840) [Link] (3 responses)

Comparison isn't sufficient, you also need to bool-ize one or both values. The Perl-ish way of writing "x xor y" was "!x != !y" which is … meh.

On the other hand, I haven't programmed anything Perl-ish for the last 15 years, so what do I know?

Logical XOR

Posted Jun 10, 2024 19:33 UTC (Mon) by mathstuf (subscriber, #69389) [Link]

Why not learn something from Haskell and make it applicative so you can say something like `!*(x = y)` that applies the `!` operator to each token in the inside of the parenthesized expression? Of course, being Perl, maybe this will be adopted too ;) . Or it already has meaning?

Logical XOR

Posted Jun 10, 2024 20:21 UTC (Mon) by rweikusat2 (subscriber, #117920) [Link] (1 responses)

Bool-ize is a bit of a misnomer as Perl has no boolean data type. The value has to be normalized to something where a numerical comparison (!=) works as intended because non-numerical strings are autoconverted to the integer 0 when used in an numerical comparison. In Perl, this expression

0 != "a"

is false but

!0 != !"a"

is true.

Logical XOR

Posted Jun 11, 2024 19:22 UTC (Tue) by jwilk (subscriber, #63328) [Link]

> Perl has no boolean data type

Since v5.36, it kinda has:

https://perldoc.perl.org/perl5360delta#Stable-boolean-tra...

Logical XOR

Posted Jun 10, 2024 18:25 UTC (Mon) by rweikusat2 (subscriber, #117920) [Link]

a ^^ b is equivalent to (a || b) && !(a && b). In Perl, (a || b) && !(a && b) && (a == b) is possible:

perl -e '$a = 0; $b = 'abc'; print(($a || $b) && !($a && $b) && ($a == $b), "\n")'

:-)

Logical XOR

Posted Jun 11, 2024 22:58 UTC (Tue) by MarcB (subscriber, #101804) [Link]

It is not really the logical XOR that is new. Perl already had this, named "xor". But "xor" is a low-precedence operator, like "and" or "or" (vs. "&&" or "||"). The high-precedence version of "xor" was missing before, which was an inconsistency.

That is all this change is about. Now all logical operator exist in three versions: bit-wise, high-precedence logical and low-precedence logical.

See https://perldoc.perl.org/perlop#Operator-Precedence-and-A...

Logical XOR

Posted Jun 10, 2024 17:04 UTC (Mon) by mb (subscriber, #50428) [Link]

> ^^ is the XOR equivalent to || and &&. Does anybody have an idea what that could be good for?

Well, that's easy.
If you think coding is fun, use ^^

¯\_(ツ)_/¯

C-Style Logical XOR

Posted Jun 10, 2024 19:22 UTC (Mon) by sub2LWN (subscriber, #134200) [Link] (7 responses)

In the "perlop" documentation it is called a "C-Style Logical Xor," so one use could be to encourage (Perl∩C) programmers to (re)visit the documentation of either language.

C-Style Logical XOR

Posted Jun 10, 2024 21:18 UTC (Mon) by dskoll (subscriber, #1630) [Link] (6 responses)

Oof, C does not have a logical XOR, so calling it "C-style" is a bit of a stretch. I can't recall ever needing a logical XOR, but if I did, I would be perfectly fine with writing (A && !B) || (B && !A). And yes, I know the parens are not strictly necessary, but I like them.

I suppose if A and B had side-effects, that might be a problem, but just Don't Do That.

C-Style Logical XOR

Posted Jun 11, 2024 4:20 UTC (Tue) by willy (subscriber, #9762) [Link] (5 responses)

I use bitops regularly and very rarely need to use ^. I'd argue it's a wart of C to use one of the rare single character operators for this purpose. I'd like to be able to write "X xor Y", but 2^30 is commonly understood to mean 1<<30 and not 28 as the C parser interprets it. Even "a = pi * r^2" would normally be interpreted differently by a human and a C parser.

C-Style Logical XOR

Posted Jun 11, 2024 16:37 UTC (Tue) by dskoll (subscriber, #1630) [Link] (4 responses)

Yup, xor is not often used in general-purpose software, though it is used in quite a few encryption and hashing algorithms. But that's bitwise-xor. I'm scratching my head trying to come up with a scenario where logical-xor is needed.

I agree that reserving ^ for exponentiation would have been better than reserving it for xor, but that's water under the bridge.

C-Style Logical XOR

Posted Jun 11, 2024 17:52 UTC (Tue) by NYKevin (subscriber, #129325) [Link]

I think I have occasionally wanted logical XNOR in general programming (I don't write much/any Perl), but I usually just end up writing bool(x) == bool(y) (replacing bool() with whatever the language's coerce-to-booleanish syntax looks like, or omitting it if we're in a strongly-typed language that has first-class bools). IMHO that's easier to read than a hypothetical XOR operator would be anyway. I suppose it might be useful in bash-like languages, where you'd have to screw around with $? and temporary variables to write an XOR/XNOR using equality. But no bash-like language actually has this feature (that I know of).

C-Style Logical XOR

Posted Jun 11, 2024 23:04 UTC (Tue) by MarcB (subscriber, #101804) [Link]

I recall using it once, for configuration validation where options were mutually exclusive. But it really is rare.

C-Style Logical XOR

Posted Jun 14, 2024 15:57 UTC (Fri) by magnus (subscriber, #34778) [Link] (1 responses)

If you're writing code to draw a chess board and deciding which color to use in each square, logical xor could be handy (row number is even xor column number is even). But thats a bit of a niche case :)

C-Style Logical XOR

Posted Jun 14, 2024 16:48 UTC (Fri) by atnot (subscriber, #124910) [Link]

Surely in that case you'd usually rather write something such as `col ^ row & 1`? It's kind of a bit too smart, but not much more than using an xor operator.

yay!

Posted Jun 10, 2024 21:50 UTC (Mon) by b7j0c (guest, #27559) [Link]

Paul Evans has brought a great deal of positive energy to the project. Great to see regularly-scheduled, well-tested, interesting releases.

Steady maintenance

Posted Jun 12, 2024 12:23 UTC (Wed) by bs338 (subscriber, #47218) [Link] (3 responses)

[There's a small typo in the article, it should just be ':reader' without the second colon]

I know summarising the significant changes is generally interesting, but my takeaway from the release is that perl is able to hold down a steady release cadence with a core cadre of committers. This means that anyone using perl today can be rely on it continuing to be available!

Picking something old at random, I see Expect hasn't had a release since 2018. So anyone using it on an up-to-date Linux distro is now relying on that distro to keep it working without a very active upstream.

Steady maintenance

Posted Jun 12, 2024 16:21 UTC (Wed) by mathstuf (subscriber, #69389) [Link] (1 responses)

> Picking something old at random, I see Expect hasn't had a release since 2018. So anyone using it on an up-to-date Linux distro is now relying on that distro to keep it working without a very active upstream.

But has anybody *wanted* changes to Expect (I'm assuming it's related the Tcl tool here)? Are there pending developments that have been merged waiting on a release? If there's nothing to update except the `use` statement…isn't not having to change that exactly what the statement is *for*?

Steady maintenance

Posted Jun 12, 2024 17:38 UTC (Wed) by malmedal (subscriber, #56172) [Link]

Yes, I'm happily using expect every day, as far as I'm concerned it can stay the way it is forever.

Also my oldest graphical program in frequent use is written is Tcl/Tk.

Having things just work is very valuable.

Steady maintenance

Posted Jun 13, 2024 17:40 UTC (Thu) by flussence (guest, #85566) [Link]

I used to keep up with Perl stuff around the [5.10 .. 5.16] timeframe. Seems like every new release I look at nowadays has something surprising in it. They have built-in class syntax now? They have built-in trim()?? (and it's properly unicode-aware too?)

And the thing is, that's where the surprises end. If I fire up some of my old code from 2014 or whenever it was, it'll probably just work here. I cannot say that about nearly any other language in the mainstream; I've been dealing with constant fallout from GCC and Python all month and those aren't even things I *write*, just use.


Copyright © 2024, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds