Re: RFC: Bump minimum Perl to 5.18.0 for next major release of both Autoconf and Automake

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Jan 29, 2021 at 5:54 PM Karl Berry <karl@xxxxxxxxxxxxxxx> wrote:

I don't know why, but I only received this message today.

> But, I think it would be wise to give users a way to override the
> requirement, of course with the caveat "don't blame us if it doesn't
> work", unless there are true requirements such that nothing at all would
> work without 5.18.0 -- which seems unlikely (and undesirable, IMHO).
> 2013 is not that long ago, in autotime.

This is a reasonable suggestion but Perl makes it difficult.  You
specify the interpreter version requirement for a Perl script with a
statement like

    use 5.006;   # what we have now

at the top of the script.  The number has to be a constant, and it has
to appear at the top of every .pm file as well as the main script.  I
don't think it makes sense to use a config.status substitution
variable for this -- then we'd have to generate _all_ of the .pm files
through config.status!

What we could do is something like this instead:

   use 5.008;  # absolute minimum requirement
   use if $] >= 5.016, feature => ':5.16';  # enable a number of
desirable features from newer perls

+ documentation that we're only _testing_ with the newer perls.

I did some more research on perl's version history (notes at end) and
I think the right thresholds are 5.10 for absolute minimum and 5.16
for 'we aren't going to test with anything older than this'.  5.10 is
the oldest perl that shipped Digest::SHA, which I have a specific need
for in autom4te; it is also the oldest perl to support `state`
variables and the `//` operator, both of which could be quite useful.
The new features in 5.12, 5.14, and 5.16 mostly have to do with
Unicode, which we do not strictly _need_ but which, if we turn them
on, give us a better chance of Just Doing The Right Thing with
user-supplied Unicode text.  The top-of-each-file boilerplate would
look something like this:

use 5.010;
use strict;
use warnings FATAL => ’all';
use utf8;
use if $] >= 5.016, feature => ’:5.16';
no  if $] >= 5.022, warnings => 'experimental::re_strict';
use if $] >= 5.022, re       => 'strict';

_Possibly_ we would also want `use open qw(:std :utf8)`, I'm not sure.
(That means "treat all files as encoded in UTF-8 unless overridden
below.")

Perl 5.10 shipped in 2007, so that's another six years of compatibility window.

zw
----

# perl 5.8

 - released 2002-07
 - support for `open FH, "-|", LIST`
 - Definitely useful modules: `Storable`, `Time::HiRes`, `if`, `open`,
   `threads` (already in use when available)
 - Possibly useful modules: `Digest::MD5`, `MIME::Base64`

# perl 5.10

 - released 2007-12
 - first version supporting `use feature`, `state`, the `//`
   operator, named capture groups, and a bunch of other regex
   enhancements
 - Possibly useful modules: `Digest::SHA`, `Compress::Zlib`

# perl 5.12

 - released 2010-04
 - first version for which `use 5.xx` implies `use strict`

# perl 5.14

 - released 2011-05
 - support for `s///r` (returns result of substitution, input variable
   is not modified)
 - first complete implementation of `use feature 'unicode_strings'`
 - Possibly useful module: `HTTP::Tiny`

# perl 5.16

 - released 2012-05
 - a whole bunch of unicode-related bug fixes
 - bugs relevant to autotools were fixed in `FindBin` and `IPC::Open3`

# perl 5.18

 - released 2013-05
 - first version with `experimental` warnings category
 - oldest version typically available on cloud platforms due to
   important security fixes (which are not directly relevant for
   use in autotools)
 - oldest version in which HTTP::Tiny implements HTTPS correctly





[Index of Archives]     [GCC Help]     [Kernel Discussion]     [RPM Discussion]     [Red Hat Development]     [Yosemite News]     [Linux USB]     [Samba]

  Powered by Linux