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