Index: gnu/usr.bin/perl/Configure
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Configure,v
diff -u -p -a -u -p -r1.60 Configure
--- gnu/usr.bin/perl/Configure	26 Dec 2025 22:15:22 -0000	1.60
+++ gnu/usr.bin/perl/Configure	29 Mar 2026 16:31:42 -0000
@@ -17502,6 +17502,8 @@ $rm_try
     esac
 esac
 
+case "$perl_lc_all_separator$perl_lc_all_category_positions_init" in
+  "")
 : Check the syntax of LC_ALL when categories are set to different locales
 echo " "
 $echo "Checking the syntax of LC_ALL when categories are set to different locales..." >&4
@@ -17878,6 +17880,23 @@ $rm -f try try.*
           # and run without having to have a bunch more #ifdef's
           d_perl_lc_all_uses_name_value_pairs="$define"
 ;;
+esac
+;;
+
+  *)    # Has an lc_all definition passed-in
+     case "$perl_lc_all_separator" in
+	\"*\") ;;     # Good, enclosed in "..."
+        *) echo "Adding enclosing double quotes to perl_lc_all_separator" >&4
+           case "$perl_lc_all_separator" in
+	      \"*) perl_lc_all_separator="$perl_lc_all_separator\"" ;;
+	      *\") perl_lc_all_separator="\"$perl_lc_all_separator" ;;
+	      *)     perl_lc_all_separator="\"$perl_lc_all_separator\"" ;;
+            esac
+     esac
+     d_perl_lc_all_separator="$define"
+     d_perl_lc_all_category_positions_init="$define"
+     d_perl_lc_all_uses_name_value_pairs="$undef"
+     ;;
 esac
 
 : see if pipe2 exists
Index: gnu/usr.bin/perl/INSTALL
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/INSTALL,v
diff -u -p -a -u -p -r1.33 INSTALL
--- gnu/usr.bin/perl/INSTALL	26 Dec 2025 22:14:12 -0000	1.33
+++ gnu/usr.bin/perl/INSTALL	29 Mar 2026 16:31:42 -0000
@@ -92,10 +92,10 @@ to F<pod/perldelta.pod> for more detaile
 
 =head3 Compatibility with earlier versions
 
-B<WARNING:> This version is not binary compatible with earlier versions
-of Perl.  If you have built extensions (i.e. modules that include C code)
-using an earlier version of Perl, you will need to rebuild and reinstall
-those extensions.
+B<WARNING:> This version is not binary compatible with versions of Perl
+earlier than 5.42.0.  If you have built extensions (i.e. modules that
+include C code) using an earlier version of Perl, you will need to
+rebuild and reinstall those extensions.
 
 Pure perl modules without XS or C code should continue to work fine
 without reinstallation.  See the discussion below on
@@ -751,7 +751,7 @@ The directories set up by Configure fall
 
 =item Directories for the perl distribution
 
-By default, Configure will use the following directories for 5.42.0.
+By default, Configure will use the following directories for 5.42.2.
 $version is the full perl version number, including subversion, e.g.
 5.12.3, and $archname is a string like sun4-sunos,
 determined by Configure.  The full definitions of all Configure
@@ -2575,8 +2575,8 @@ L<https://www.chiark.greenend.org.uk/~sg
 
 =head1 Coexistence with earlier versions of perl 5
 
-Perl 5.42.0 is not binary compatible with earlier versions of Perl.
-In other words, you will have to recompile your XS modules.
+Perl 5.42.2 is not binary compatible with versions of Perl earlier than
+5.42.0.  In other words, you will have to recompile your XS modules.
 
 In general, you can usually safely upgrade from one stable version of Perl
 (e.g. 5.30.0) to another similar minor version (e.g. 5.30.1) without
@@ -2650,9 +2650,9 @@ won't interfere with another version.  (
 libraries after 5.6.0, but not for executables. TODO?)  One convenient
 way to do this is by using a separate prefix for each version, such as
 
-	sh Configure -Dprefix=/opt/perl5.42.0
+	sh Configure -Dprefix=/opt/perl5.42.2
 
-and adding /opt/perl5.42.0/bin to the shell PATH variable.  Such users
+and adding /opt/perl5.42.2/bin to the shell PATH variable.  Such users
 may also wish to add a symbolic link /usr/local/bin/perl so that
 scripts can still start with #!/usr/local/bin/perl.
 
@@ -2665,13 +2665,13 @@ seriously consider using a separate dire
 subversions may not have all the compatibility wrinkles ironed out
 yet.
 
-=head2 Upgrading from 5.40.0 or earlier
+=head2 Upgrading from 5.41.13 or earlier
 
-B<Perl 5.42.0 may not be binary compatible with Perl 5.40.0 or
+B<Perl 5.42.2 may not be binary compatible with Perl 5.41.13 or
 earlier Perl releases.>  Perl modules having binary parts
 (meaning that a C compiler is used) will have to be recompiled to be
-used with 5.42.0.  If you find you do need to rebuild an extension with
-5.42.0, you may safely do so without disturbing the older
+used with 5.42.2.  If you find you do need to rebuild an extension with
+5.42.2, you may safely do so without disturbing the older
 installations.  (See L<"Coexistence with earlier versions of perl 5">
 above.)
 
@@ -2704,15 +2704,15 @@ Firstly, the bare minimum to run this sc
      print("$f\n");
   }
 
-in Linux with perl-5.42.0 is as follows (under $Config{prefix}):
+in Linux with perl-5.42.2 is as follows (under $Config{prefix}):
 
   ./bin/perl
-  ./lib/perl5/5.42.0/strict.pm
-  ./lib/perl5/5.42.0/warnings.pm
-  ./lib/perl5/5.42.0/i686-linux/File/Glob.pm
-  ./lib/perl5/5.42.0/feature.pm
-  ./lib/perl5/5.42.0/XSLoader.pm
-  ./lib/perl5/5.42.0/i686-linux/auto/File/Glob/Glob.so
+  ./lib/perl5/5.42.2/strict.pm
+  ./lib/perl5/5.42.2/warnings.pm
+  ./lib/perl5/5.42.2/i686-linux/File/Glob.pm
+  ./lib/perl5/5.42.2/feature.pm
+  ./lib/perl5/5.42.2/XSLoader.pm
+  ./lib/perl5/5.42.2/i686-linux/auto/File/Glob/Glob.so
 
 Secondly, for perl-5.10.1, the Debian perl-base package contains 591
 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its
Index: gnu/usr.bin/perl/MANIFEST
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/MANIFEST,v
diff -u -p -a -u -p -r1.78 MANIFEST
--- gnu/usr.bin/perl/MANIFEST	26 Dec 2025 22:16:21 -0000	1.78
+++ gnu/usr.bin/perl/MANIFEST	29 Mar 2026 16:31:42 -0000
@@ -6373,9 +6373,13 @@ pod/perl5381delta.pod			Perl changes in 
 pod/perl5382delta.pod			Perl changes in version 5.38.2
 pod/perl5383delta.pod			Perl changes in version 5.38.3
 pod/perl5384delta.pod			Perl changes in version 5.38.4
+pod/perl5385delta.pod			Perl changes in version 5.38.5
 pod/perl5400delta.pod			Perl changes in version 5.40.0
 pod/perl5401delta.pod			Perl changes in version 5.40.1
 pod/perl5402delta.pod			Perl changes in version 5.40.2
+pod/perl5403delta.pod			Perl changes in version 5.40.3
+pod/perl5420delta.pod			Perl changes in version 5.42.0
+pod/perl5421delta.pod			Perl changes in version 5.42.1
 pod/perl561delta.pod			Perl changes in version 5.6.1
 pod/perl56delta.pod			Perl changes in version 5.6
 pod/perl581delta.pod			Perl changes in version 5.8.1
@@ -6624,6 +6628,7 @@ t/class/construct.t			See if class const
 t/class/destruct.t			See if class destruction works
 t/class/field.t				See if class field declarations work
 t/class/gh22169.t			Test defining a class that previously failed to define
+t/class/gh23511.t			Test defining a reader after a strict 'vars' violation
 t/class/inherit.t			See if class inheritance works
 t/class/method.t			See if class method declarations work
 t/class/phasers.t			See if class phaser blocks work
Index: gnu/usr.bin/perl/META.json
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/META.json,v
diff -u -p -a -u -p -r1.17 META.json
--- gnu/usr.bin/perl/META.json	26 Dec 2025 22:14:12 -0000	1.17
+++ gnu/usr.bin/perl/META.json	29 Mar 2026 16:31:42 -0000
@@ -118,6 +118,6 @@
          "url" : "https://github.com/Perl/perl5"
       }
    },
-   "version" : "5.042000",
+   "version" : "5.042002",
    "x_serialization_backend" : "JSON::PP version 4.16"
 }
Index: gnu/usr.bin/perl/META.yml
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/META.yml,v
diff -u -p -a -u -p -r1.17 META.yml
--- gnu/usr.bin/perl/META.yml	26 Dec 2025 22:14:12 -0000	1.17
+++ gnu/usr.bin/perl/META.yml	29 Mar 2026 16:31:42 -0000
@@ -105,5 +105,5 @@ resources:
   homepage: https://www.perl.org/
   license: https://dev.perl.org/licenses/
   repository: https://github.com/Perl/perl5
-version: '5.042000'
+version: '5.042002'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.020'
Index: gnu/usr.bin/perl/Makefile.SH
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Makefile.SH,v
diff -u -p -a -u -p -r1.71 Makefile.SH
--- gnu/usr.bin/perl/Makefile.SH	26 Dec 2025 22:16:21 -0000	1.71
+++ gnu/usr.bin/perl/Makefile.SH	29 Mar 2026 16:31:42 -0000
@@ -636,7 +636,7 @@ esac
 
 $spitshell >>$Makefile <<'!NO!SUBS!'
 
-perltoc_pod_prereqs = extra.pods pod/perl5420delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod
+perltoc_pod_prereqs = extra.pods pod/perl5422delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod
 generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs)
 generated_headers = uudmap.h bitcount.h mg_data.h
 
@@ -1143,9 +1143,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) auto
 pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST
 	$(MINIPERL) pod/perlmodlib.PL -q
 
-pod/perl5420delta.pod: pod/perldelta.pod
-	$(RMS) pod/perl5420delta.pod
-	$(LNS) perldelta.pod pod/perl5420delta.pod
+pod/perl5422delta.pod: pod/perldelta.pod
+	$(RMS) pod/perl5422delta.pod
+	$(LNS) perldelta.pod pod/perl5422delta.pod
 
 extra.pods: $(MINIPERL_EXE)
 	-@test ! -f extra.pods || rm -f `cat extra.pods`
Index: gnu/usr.bin/perl/Makefile.bsd-wrapper1
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Makefile.bsd-wrapper1,v
diff -u -p -a -u -p -r1.48 Makefile.bsd-wrapper1
--- gnu/usr.bin/perl/Makefile.bsd-wrapper1	26 Dec 2025 22:15:22 -0000	1.48
+++ gnu/usr.bin/perl/Makefile.bsd-wrapper1	29 Mar 2026 16:31:42 -0000
@@ -97,10 +97,14 @@ _quick3p=
     perl5382delta 1			pod/perl5382delta.pod \
     perl5383delta 1			pod/perl5383delta.pod \
     perl5384delta 1			pod/perl5384delta.pod \
+    perl5385delta 1			pod/perl5385delta.pod \
     perl5400delta 1			pod/perl5400delta.pod \
     perl5401delta 1			pod/perl5401delta.pod \
     perl5402delta 1			pod/perl5402delta.pod \
+    perl5403delta 1			pod/perl5403delta.pod \
     perl5420delta 1			pod/perl5420delta.pod \
+    perl5421delta 1			pod/perl5421delta.pod \
+    perl5422delta 1			pod/perl5422delta.pod \
     perl561delta 1			pod/perl561delta.pod \
     perl56delta 1			pod/perl56delta.pod \
     perl581delta 1			pod/perl581delta.pod \
Index: gnu/usr.bin/perl/README
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README,v
diff -u -p -a -u -p -r1.26 README
--- gnu/usr.bin/perl/README	26 Dec 2025 22:14:12 -0000	1.26
+++ gnu/usr.bin/perl/README	29 Mar 2026 16:31:42 -0000
@@ -1,4 +1,4 @@
-Perl is Copyright (C) 1993 - 2025 by Larry Wall and others.
+Perl is Copyright (C) 1993 - 2026 by Larry Wall and others.
 
 All rights reserved.
 
Index: gnu/usr.bin/perl/README.haiku
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.haiku,v
diff -u -p -a -u -p -r1.17 README.haiku
--- gnu/usr.bin/perl/README.haiku	26 Dec 2025 22:14:12 -0000	1.17
+++ gnu/usr.bin/perl/README.haiku	29 Mar 2026 16:31:42 -0000
@@ -24,9 +24,9 @@ The build procedure is completely standa
 Make perl executable and create a symlink for libperl:
 
   chmod a+x /boot/common/bin/perl
-  cd /boot/common/lib; ln -s perl5/5.42.0/BePC-haiku/CORE/libperl.so .
+  cd /boot/common/lib; ln -s perl5/5.42.2/BePC-haiku/CORE/libperl.so .
 
-Replace C<5.42.0> with your respective version of Perl.
+Replace C<5.42.2> with your respective version of Perl.
 
 =head1 KNOWN PROBLEMS
 
Index: gnu/usr.bin/perl/README.macosx
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.macosx,v
diff -u -p -a -u -p -r1.17 README.macosx
--- gnu/usr.bin/perl/README.macosx	26 Dec 2025 22:14:12 -0000	1.17
+++ gnu/usr.bin/perl/README.macosx	29 Mar 2026 16:31:42 -0000
@@ -12,9 +12,9 @@ perlmacosx - Perl under Mac OS X
 
 This document briefly describes Perl under Mac OS X.
 
-  curl -O https://www.cpan.org/src/perl-5.42.0.tar.gz
-  tar -xzf perl-5.42.0.tar.gz
-  cd perl-5.42.0
+  curl -O https://www.cpan.org/src/perl-5.42.2.tar.gz
+  tar -xzf perl-5.42.2.tar.gz
+  cd perl-5.42.2
   ./Configure -des -Dprefix=/usr/local/
   make
   make test
@@ -22,7 +22,7 @@ This document briefly describes Perl und
 
 =head1 DESCRIPTION
 
-The latest Perl release (5.42.0 as of this writing) builds without changes
+The latest Perl release (5.42.2 as of this writing) builds without changes
 under all versions of Mac OS X from 10.3 "Panther" onwards. 
 
 In order to build your own version of Perl you will need 'make',
Index: gnu/usr.bin/perl/README.os2
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.os2,v
diff -u -p -a -u -p -r1.33 README.os2
--- gnu/usr.bin/perl/README.os2	26 Dec 2025 22:14:12 -0000	1.33
+++ gnu/usr.bin/perl/README.os2	29 Mar 2026 16:31:42 -0000
@@ -621,7 +621,7 @@ C<set PERLLIB_PREFIX> in F<Config.sys>, 
 
 =item Additional Perl modules
 
-  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.42.0/
+  unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.42.2/
 
 Same remark as above applies.  Additionally, if this directory is not
 one of directories on @INC (and @INC is influenced by C<PERLLIB_PREFIX>), you
Index: gnu/usr.bin/perl/README.vms
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/README.vms,v
diff -u -p -a -u -p -r1.34 README.vms
--- gnu/usr.bin/perl/README.vms	26 Dec 2025 22:14:12 -0000	1.34
+++ gnu/usr.bin/perl/README.vms	29 Mar 2026 16:31:42 -0000
@@ -139,11 +139,11 @@ You may need to set up a foreign symbol 
 choice.  Once you have done so, use a command like the following to
 unpack the archive:
 
-    vmstar -xvf perl-5^.42^.0.tar
+    vmstar -xvf perl-5^.42^.2.tar
 
 Then set default to the top-level source directory like so:
 
-    set default [.perl-5^.42^.0]
+    set default [.perl-5^.42^.2]
 
 and proceed with configuration as described in the next section.
 
Index: gnu/usr.bin/perl/class.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/class.c,v
diff -u -p -a -u -p -r1.1.1.3 class.c
--- gnu/usr.bin/perl/class.c	26 Dec 2025 22:12:29 -0000	1.1.1.3
+++ gnu/usr.bin/perl/class.c	29 Mar 2026 16:31:42 -0000
@@ -1140,7 +1140,8 @@ apply_field_attribute_reader(pTHX_ PADNA
     OP *nameop = newSVOP(OP_CONST, 0, value);
 
     CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops);
-    CvIsMETHOD_on(cv);
+    if (cv)
+        CvIsMETHOD_on(cv);
 }
 
 /* If '@_' is called "snail", then elements of it can be called "slugs"; i.e.
@@ -1238,7 +1239,8 @@ apply_field_attribute_writer(pTHX_ PADNA
     OP *nameop = newSVOP(OP_CONST, 0, value);
 
     CV *cv = newATTRSUB(floor_ix, nameop, NULL, NULL, ops);
-    CvIsMETHOD_on(cv);
+    if (cv)
+        CvIsMETHOD_on(cv);
 }
 
 static struct {
Index: gnu/usr.bin/perl/config.over
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/config.over,v
diff -u -p -a -u -p -r1.23 config.over
--- gnu/usr.bin/perl/config.over	3 Sep 2023 01:43:09 -0000	1.23
+++ gnu/usr.bin/perl/config.over	29 Mar 2026 16:31:42 -0000
@@ -69,4 +69,3 @@ ranlib='ranlib'
 # enabling syscall even if we don't have it
 d_syscall=define
 d_syscallproto=define
-
Index: gnu/usr.bin/perl/locale.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/locale.c,v
diff -u -p -a -u -p -r1.13 locale.c
--- gnu/usr.bin/perl/locale.c	26 Dec 2025 22:14:12 -0000	1.13
+++ gnu/usr.bin/perl/locale.c	29 Mar 2026 16:31:45 -0000
@@ -8143,11 +8143,12 @@ S_maybe_override_codeset(pTHX_ const cha
 
 /*
 =for apidoc_section $time
-=for apidoc      sv_strftime_tm
-=for apidoc_item sv_strftime_ints
+=for apidoc      sv_strftime_ints
+=for apidoc_item sv_strftime_tm
 =for apidoc_item my_strftime
 
-These implement the libc strftime().
+These implement libc strftime(), overcoming various deficiencies it has; you
+will come to regret sooner or later using it directly instead of these.
 
 On failure, they return NULL, and set C<errno> to C<EINVAL>.
 
@@ -8156,70 +8157,154 @@ handle the UTF-8ness of the current loca
 result.  Only if the current C<LC_TIME> locale is a UTF-8 one (and S<C<use
 bytes>> is not in effect) will the result be marked as UTF-8.
 
+For these, the caller assumes ownership of the returned SV with a reference
+count of 1.
+
 C<my_strftime> is kept for backwards compatibility.  Knowing if its result
 should be considered UTF-8 or not requires significant extra logic.
 
 Note that all three functions are always executed in the underlying
 C<LC_TIME> locale of the program, giving results based on that locale.
 
-The functions differ as follows:
+The stringified C<fmt> parameter in all is the same as the system libc
+C<strftime>.  The available conversion specifications vary by platform.  These
+days, every specification listed in the ANSI C99 standard should be usable
+everywhere.  These are C<a A b B c d H I j m M p S U w W x X y Y Z %>. 
+
+But note that the B<results> of some of the conversion specifiers are
+non-portable.  For example, the specifiers C<a A b B c p Z> change according
+to the locale settings of the user, and both how to set locales (the
+locale names) and what output to expect are not standardized.
+The specifier C<c> changes according to the timezone settings of the
+user and the timezone computation rules of the operating system.
+The C<Z> specifier is notoriously unportable since the names of
+timezones are not standardized. Sticking to the numeric specifiers is the
+safest route.
 
-C<sv_strftime_tm> takes a pointer to a filled-in S<C<struct tm>> parameter.  It
-ignores the values of the C<wday> and C<yday> fields in it.  The other fields
-give enough information to accurately calculate these values, and are used for
-that purpose.
-
-The caller assumes ownership of the returned SV with a reference count of 1.
-
-C<sv_strftime_ints> takes a bunch of integer parameters that together
-completely define a given time.  It calculates the S<C<struct tm>> to pass to
-libc strftime(), and calls that function.
+At the time of this writing, for example, C<%s> is not available on
+Windows-like systems.
 
-The value of C<isdst> is used as follows:
+The functions differ as follows:
 
 =over
 
-=item 0
+=item *
+
+The C<fmt> parameter and the return from C<my_strftime> are S<C<char *>>
+instead of the S<C<SV *>> in the other two functions.  This means the
+UTF-8ness of the format and result are unspecified.  The result MUST be
+arranged to be FREED BY THE CALLER).
 
-No daylight savings time is in effect
+=item *
 
-=item E<gt>0
+C<sv_strftime_ints> and C<my_strftime> take a bunch of integer parameters that
+together completely define a given time.  They calculate the S<C<struct tm>>
+to pass to libc strftime(), and call that function.  See below for the meaning
+of the parameters.
 
-Check if daylight savings time is in effect, and adjust the results
-accordingly.
+C<sv_strftime_tm> takes a pointer to an already filled-in S<C<struct tm>>
+parameter, so avoids that calculation.
 
-=item E<lt>0
+=item *
 
-This value is reserved for internal use by the L<POSIX> module for backwards
-compatibility purposes.
+C<my_strftime> takes two extra parameters that are ignored, being kept only
+for historical reasons.  These are C<wday> and C<yday>.
 
 =back
 
-The caller assumes ownership of the returned SV with a reference count of 1.
+The C99 Standard calls for S<C<struct tm>> to contain at least these fields:
 
-C<my_strftime> is like C<sv_strftime_ints> except that:
+ int tm_sec;    // seconds after the minute — [0, 60]
+ int tm_min;    // minutes after the hour — [0, 59]
+ int tm_hour;   // hours since midnight — [0, 23]
+ int tm_mday;   // day of the month — [1, 31]
+ int tm_mon;    // months since January — [0, 11]
+ int tm_year;   // years since 1900
+ int tm_wday;   // days since Sunday — [0, 6]
+ int tm_yday;   // days since January 1 — [0, 365]
+ int tm_isdst;  // Daylight Saving Time flag
+
+C<tm_wday> and C<tm_yday> are output only; the other fields give enough
+information to accurately calculate these, and are internally used for that
+purpose.
+
+The numbers enclosed in the square brackets above give the maximum legal
+ranges for values in the corresponding field.  Those ranges are restricted for
+some inputs. For example, not all months have 31 days, but all hours have 60
+minutes.  If you set a number that is outside the corresponding range, perl
+and the libc functions will automatically normalize it to be inside the range,
+adjusting other values as necessary.  For example, specifying February 29, is
+the same as saying March 1 for non-leap years; and using a minute value of 60
+will instead change that to a 0, and increment the hour, which in turn, if the
+hour was 23, will roll it over to 0 it and increment the day, and so on.
+
+Each parameter to C<sv_strftime_ints> and C<my_strftime> populates the
+similarly-named field in this structure.
+
+A value of 60 is legal for C<tm_sec>, but only for those moments when an
+official leap second has been declared.  It is undefined behavior to use them
+otherwise, and the behavior does vary depending on the implementation.
+Some implementations take your word for it that this is a leap second, leaving
+it as the 61st second of the given minute; some roll it over to be the 0th
+second of the following minute; some treat it as 0.  Some non-conforming
+implementations always roll it over to the next minute, regardless of whether
+an actual leap second is occurring or not.  (And yes, it is a real problem
+that different computers have a different conception of what the current time
+is; you can search the internet for details.)
+
+There is no limit (outside the size of C<int>) for the value of C<tm_year>,
+but sufficiently negative values (for earlier than 1900) may have different
+results on different systems and locales.  Some libc implementations may know
+when a given locale adopted the Greorian calendar, and adjust for that.
+Others will not.  (And some countries didn't adopt the Gregorian calendar
+until after 1900.)  Probably all implementations assume modern time zones go
+back forever, before they were actually invented, starting in the last half of
+the 19th century.
+
+The treatment of the C<isdst> field has varied over previous Perl versions,
+and has been buggy (both by perl and by some libc implementations), but is now
+aligned, as best we can, with the POSIX Standard, as follows:
 
 =over
 
-=item The C<fmt> parameter and the return are S<C<char *>> instead of
-S<C<SV *>>.
+=item C<is_dist> is 0
 
-This means the UTF-8ness of the result is unspecified.  The result MUST be
-arranged to be FREED BY THE CALLER).
+The function is to assume that daylight savings time is not in effect.  This
+should now always work properly, as perl uses its own implementation in this
+case, avoiding non-conforming libc ones.
 
-=item The C<is_dst> parameter is ignored.
+=item C<is_dist> is E<gt>0
 
-Daylight savings time is never considered to be in effect.
+The function is to assume that daylight savings time is in effect, though some
+underlying libc implementations treat this as a hint instead of a mandate.
 
-=item It has extra parameters C<yday> and C<wday> that are ignored.
+=item C<is_dist> is E<lt>0
 
-These exist only for historical reasons; the values for the corresponding
-fields in S<C<struct tm>> are calculated from the other arguments.
+The function is to itself try to calculate if daylight savings time is in
+effect.  More recent libc implementations are better at this than earlier
+ones.
 
 =back
 
-Note that all three functions are always executed in the underlying C<LC_TIME>
-locale of the program, giving results based on that locale.
+Some libc implementations have extra fields in S<C<struct tm>>.  The two that
+perl handles are:
+
+  int tm_gmtoff;            // Seconds East of UTC [%z]
+  const char * tm_zone;     // Timezone abbreviation [%Z]
+
+These are both output only.  Using the respective conversion specifications
+(enclosed in the square brackets) in the C<fmt> parameter is a portable way to
+gain access to these values, working both on systems that have and don't have
+these fields.
+
+Example, in the C<C> locale:
+
+ my_strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 0, 0, -1 );
+
+returns
+
+ "Tuesday, December 12, 1995"
+
 =cut
  */
 
@@ -8231,7 +8316,6 @@ Perl_my_strftime(pTHX_ const char *fmt, 
     PERL_ARGS_ASSERT_MY_STRFTIME;
     PERL_UNUSED_ARG(wday);
     PERL_UNUSED_ARG(yday);
-    PERL_UNUSED_ARG(isdst);
 
 #ifdef USE_LOCALE_TIME
     const char * locale = querylocale_c(LC_TIME);
@@ -8240,7 +8324,7 @@ Perl_my_strftime(pTHX_ const char *fmt, 
 #endif
 
     struct tm  mytm;
-    ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, 0);
+    ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, isdst);
     if (! strftime_tm(fmt, PL_scratch_langinfo, locale, &mytm)) {
         return NULL;
     }
@@ -8260,15 +8344,8 @@ Perl_sv_strftime_ints(pTHX_ SV * fmt, in
     const char * locale = "C";
 #endif
 
-    /* A negative 'isdst' triggers backwards compatibility mode for
-     * POSIX::strftime(), in which 0 is always passed to ints_to_tm() so that
-     * the possibility of daylight savings time is never considered,  But, a 1
-     * is eventually passed to libc strftime() so that it returns the results
-     * it always has for a non-zero 'isdst'.  See GH #22351 */
     struct tm  mytm;
-    ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year,
-                              MAX(0, isdst));
-    mytm.tm_isdst = MIN(1, abs(isdst));
+    ints_to_tm(&mytm, locale, sec, min, hour, mday, mon, year, isdst);
     return sv_strftime_common(fmt, locale, &mytm);
 }
 
@@ -8352,20 +8429,22 @@ S_ints_to_tm(pTHX_ struct tm * mytm,
     mytm->tm_year = year;
 
     struct tm * which_tm = mytm;
-    struct tm aux_tm;
 
 #ifndef HAS_MKTIME
 
     mini_mktime(mytm);
 
 #else
+#  if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE)
+#    define ALWAYS_RUN_MKTIME
+
+    struct tm aux_tm;
+
+#  endif
 
     /* On platforms that have either of these two fields, we have to run the
      * libc mktime() in order to set them, as mini_mktime() doesn't deal with
      * them.  [perl #18238] */
-#  if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE)
-#    define ALWAYS_RUN_MKTIME
-#  endif
 
     /* When isdst is 0, it means to consider daylight savings time as never
      * being in effect.  Many libc implementations of mktime() do not allow
@@ -8374,44 +8453,52 @@ S_ints_to_tm(pTHX_ struct tm * mytm,
     if (isdst == 0) {
         mini_mktime(mytm);
 
-#  ifndef ALWAYS_RUN_MKTIME
-
-    /* When we don't always need libc mktime(), we call it only when we didn't
-     * call mini_mktime() */
-    } else {
+#  ifdef ALWAYS_RUN_MKTIME
 
-#  else
         /* Here will have to run libc mktime() in order to get the values of
          * some fields that mini_mktime doesn't populate.  We don't want
-         * mktime's side effect of looking for dst, so we have to have a
-         * separate tm structure from which we copy just those fields into the
-         * returned structure.  Initialize its values.  mytm should now be a
-         * normalized version of the input. */
+         * mktime's side effect of looking for dst (because isdst==0), so we
+         * have to have a separate tm structure from which we copy just those
+         * fields into the structure we return.  Initialize its values, which
+         * have now been normalized by mini_mktime. */
         aux_tm = *mytm;
-        aux_tm.tm_isdst = isdst;
         which_tm = &aux_tm;
 
 #  endif
 
+    }
+
+#  ifndef ALWAYS_RUN_MKTIME
+
+    else {  /* Don't run libc mktime if both:
+                1) we ran mini_mktime above; and
+                2) we don't have to always run libc mktime */
+
+#  endif
+
         /* Here, we need to run libc mktime(), either because we want to take
          * dst into consideration, or because it calculates one or two fields
-         * that we need that mini_mktime() doesn't handle.
-         *
-         * Unlike mini_mktime(), it does consider the locale, so have to switch
+         * that we need that mini_mktime() doesn't handle. */
+        which_tm->tm_isdst = isdst;
+
+        /* Unlike mini_mktime(), it does consider the locale, so have to switch
          * to the correct one. */
         const char * orig_TIME_locale = toggle_locale_c(LC_TIME, locale);
         MKTIME_LOCK;
 
-        /* which_tm points to an auxiliary copy if we ran mini_mktime().
+        /* 'which_tm' points to an auxiliary copy if we ran mini_mktime().
          * Otherwise it points to the passed-in one which now gets populated
          * directly. */
         (void) mktime(which_tm);
 
         MKTIME_UNLOCK;
         restore_toggled_locale_c(LC_TIME, orig_TIME_locale);
+
+#  ifndef ALWAYS_RUN_MKTIME
+
     }
 
-#  if defined(HAS_TM_TM_GMTOFF) || defined(HAS_TM_TM_ZONE)
+#  else
 
     /* And use the saved libc values for tm_gmtoff and tm_zone if we used an
      * auxiliary struct to get them */
Index: gnu/usr.bin/perl/op.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/op.c,v
diff -u -p -a -u -p -r1.32 op.c
--- gnu/usr.bin/perl/op.c	10 Jan 2026 23:20:43 -0000	1.32
+++ gnu/usr.bin/perl/op.c	29 Mar 2026 16:31:45 -0000
@@ -3756,7 +3756,13 @@ Perl_doref(pTHX_ OP *o, I32 type, bool s
             break;
 
         case OP_COND_EXPR:
+            /* OP_COND_EXPR is the only op where we have to propagate
+             * context to *both* branches. Recurse on the first branch,
+             * then iterate on the second branch.
+             */
             o = OpSIBLING(cUNOPo->op_first);
+            doref(o, type, set_op_ref);
+            o = OpSIBLING(o);
             continue;
 
         case OP_RV2SV:
@@ -3829,22 +3835,12 @@ Perl_doref(pTHX_ OP *o, I32 type, bool s
             break;
         } /* switch */
 
-        while (1) {
-            if (o == top_op)
-                return scalar(top_op); /* at top; no parents/siblings to try */
-            if (OpHAS_SIBLING(o)) {
-                o = o->op_sibparent;
-                /* Normally skip all siblings and go straight to the parent;
-                 * the only op that requires two children to be processed
-                 * is OP_COND_EXPR */
-                if (!OpHAS_SIBLING(o)
-                        && o->op_sibparent->op_type == OP_COND_EXPR)
-                    break;
-                continue;
-            }
-            o = o->op_sibparent; /* try parent's next sibling */
-        }
+        /* whole tree has been scanned for ref stuff; now propagate
+         * scalar context */
+        return scalar(top_op);
+
     } /* while */
+
 }
 
 
@@ -8341,6 +8337,7 @@ Perl_utilize(pTHX_ int aver, I32 floor, 
         else {
             PL_hints &= ~HINT_ASCII_ENCODING;
         }
+        notify_parser_that_encoding_changed();
 
         PL_prevailing_version = shortver;
     }
Index: gnu/usr.bin/perl/patchlevel.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/patchlevel.h,v
diff -u -p -a -u -p -r1.57 patchlevel.h
--- gnu/usr.bin/perl/patchlevel.h	26 Dec 2025 22:14:12 -0000	1.57
+++ gnu/usr.bin/perl/patchlevel.h	29 Mar 2026 16:31:45 -0000
@@ -39,7 +39,7 @@ Instead use one of the version compariso
 
 #define PERL_REVISION	5		/* age */
 #define PERL_VERSION	42		/* epoch */
-#define PERL_SUBVERSION	0		/* generation */
+#define PERL_SUBVERSION	2		/* generation */
 
 /* The following numbers describe the earliest compatible version of
    Perl ("compatibility" here being defined as sufficient binary/API
Index: gnu/usr.bin/perl/perl.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/perl.c,v
diff -u -p -a -u -p -r1.51 perl.c
--- gnu/usr.bin/perl/perl.c	26 Dec 2025 22:15:22 -0000	1.51
+++ gnu/usr.bin/perl/perl.c	29 Mar 2026 16:31:45 -0000
@@ -4,7 +4,7 @@
  *    Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
  *    2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
  *    2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
- *    2024, 2025
+ *    2024, 2025, 2026
  *    by Larry Wall and others
  *
  *    You may distribute under the terms of either the GNU General Public
@@ -4030,7 +4030,7 @@ S_minus_v(pTHX)
 #endif
 
         PerlIO_printf(PIO_stdout,
-		      "\n\nCopyright 1987-2025, Larry Wall\n");
+		      "\n\nCopyright 1987-2026, Larry Wall\n");
 #ifdef OS2
         PerlIO_printf(PIO_stdout,
                       "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n"
Index: gnu/usr.bin/perl/Cross/config.sh-arm-linux
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Cross/config.sh-arm-linux,v
diff -u -p -a -u -p -r1.20 config.sh-arm-linux
--- gnu/usr.bin/perl/Cross/config.sh-arm-linux	26 Dec 2025 22:14:13 -0000	1.20
+++ gnu/usr.bin/perl/Cross/config.sh-arm-linux	29 Mar 2026 16:31:42 -0000
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='42'
 api_versionstring='5.42.0'
 ar='ar'
-archlib='/usr/lib/perl5/5.42.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.42.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.42.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.42.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -55,7 +55,7 @@ castflags='0'
 cat='cat'
 cc='cc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -839,7 +839,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.42.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.42.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -847,13 +847,13 @@ installman1dir='./install_me_here/usr/sh
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.42.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.42.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -990,8 +990,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.42.0'
-privlibexp='/usr/lib/perl5/5.42.0'
+privlib='/usr/lib/perl5/5.42.2'
+privlibexp='/usr/lib/perl5/5.42.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1056,17 +1056,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.42.0'
+sitelib='/usr/lib/perl5/site_perl/5.42.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.42.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.42.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1107,7 +1107,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='0'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1202,8 +1202,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.42.0'
-version_patchlevel_string='version 42 subversion 0'
+version='5.42.2'
+version_patchlevel_string='version 42 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1218,7 +1218,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=42
-PERL_SUBVERSION=0
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=42
 PERL_API_SUBVERSION=0
Index: gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770,v
diff -u -p -a -u -p -r1.17 config.sh-arm-linux-n770
--- gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770	26 Dec 2025 22:14:13 -0000	1.17
+++ gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770	29 Mar 2026 16:31:42 -0000
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='42'
 api_versionstring='5.42.0'
 ar='ar'
-archlib='/usr/lib/perl5/5.42.0/armv4l-linux'
-archlibexp='/usr/lib/perl5/5.42.0/armv4l-linux'
+archlib='/usr/lib/perl5/5.42.2/armv4l-linux'
+archlibexp='/usr/lib/perl5/5.42.2/armv4l-linux'
 archname64=''
 archname='armv4l-linux'
 archobjs=''
@@ -54,7 +54,7 @@ castflags='0'
 cat='cat'
 cc='arm-none-linux-gnueabi-gcc'
 cccdlflags='-fpic'
-ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.0/armv4l-linux/CORE'
+ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.42.2/armv4l-linux/CORE'
 ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64'
 ccname='arm-linux-gcc'
@@ -837,7 +837,7 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='./install_me_here/usr/lib/perl5/5.42.0/armv4l-linux'
+installarchlib='./install_me_here/usr/lib/perl5/5.42.2/armv4l-linux'
 installbin='./install_me_here/usr/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -845,13 +845,13 @@ installman1dir='./install_me_here/usr/sh
 installman3dir='./install_me_here/usr/share/man/man3'
 installprefix='./install_me_here/usr'
 installprefixexp='./install_me_here/usr'
-installprivlib='./install_me_here/usr/lib/perl5/5.42.0'
+installprivlib='./install_me_here/usr/lib/perl5/5.42.2'
 installscript='./install_me_here/usr/bin'
-installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
+installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
 installsitebin='./install_me_here/usr/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.0'
+installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.42.2'
 installsiteman1dir='./install_me_here/usr/share/man/man1'
 installsiteman3dir='./install_me_here/usr/share/man/man3'
 installsitescript='./install_me_here/usr/bin'
@@ -988,8 +988,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/usr/lib/perl5/5.42.0'
-privlibexp='/usr/lib/perl5/5.42.0'
+privlib='/usr/lib/perl5/5.42.2'
+privlibexp='/usr/lib/perl5/5.42.2'
 procselfexe='"/proc/self/exe"'
 prototype='define'
 ptrsize='4'
@@ -1054,17 +1054,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
-sitearchexp='/usr/lib/perl5/site_perl/5.42.0/armv4l-linux'
+sitearch='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
+sitearchexp='/usr/lib/perl5/site_perl/5.42.2/armv4l-linux'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/usr/lib/perl5/site_perl/5.42.0'
+sitelib='/usr/lib/perl5/site_perl/5.42.2'
 sitelib_stem='/usr/lib/perl5/site_perl'
-sitelibexp='/usr/lib/perl5/site_perl/5.42.0'
+sitelibexp='/usr/lib/perl5/site_perl/5.42.2'
 siteman1dir='/usr/share/man/man1'
 siteman1direxp='/usr/share/man/man1'
 siteman3dir='/usr/share/man/man3'
@@ -1105,7 +1105,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/usr/include/string.h'
 submit=''
-subversion='0'
+subversion='2'
 sysman='/usr/share/man/man1'
 tail=''
 tar=''
@@ -1200,8 +1200,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.42.0'
-version_patchlevel_string='version 42 subversion 0'
+version='5.42.2'
+version_patchlevel_string='version 42 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth='/usr/lib/386 /lib/386'
@@ -1216,7 +1216,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=42
-PERL_SUBVERSION=0
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=42
 PERL_API_SUBVERSION=0
Index: gnu/usr.bin/perl/Porting/Glossary
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/Glossary,v
diff -u -p -a -u -p -r1.22 Glossary
--- gnu/usr.bin/perl/Porting/Glossary	26 Dec 2025 22:14:13 -0000	1.22
+++ gnu/usr.bin/perl/Porting/Glossary	29 Mar 2026 16:31:42 -0000
@@ -4708,12 +4708,27 @@ perl_lc_all_category_positions_init (dis
 	setlocale(LC_ALL, NULL) when not all categories are the same, on
 	systems that use a positional notation.  After element [0] is
 	$lc_all_separator_init, then the category given by element [1], and so on.
+	For example, at the time this was written, the value in config.sh for
+	FreeBSD boxes is:
+            perl_lc_all_category_positions_init='{ 1, 2, 3, 4, 5, 6 }'
+	And the result of running this program
+            LC_ALL=C ./perl -Ilib -MPOSIX                               \
+                            -le 'setlocale(LC_MONETARY, "fr_FR.UTF-8"); \
+                                 print setlocale(LC_ALL)'
+	is
+            C/C/fr_FR.UTF-8/C/C/C
+	This shows that the LC_MONETARY category on FreeBSD occupies the third
+	position in the string returned by querying LC_ALL.  (See
+	perl_lc_all_separator for the source of the forward slash.)
 
 perl_lc_all_separator (disparate_lc_all.U):
-	This symbol, when defined, gives the substring used to separate
-	categories in the aggregated string returned by setlocale(LC_ALL, NULL)
-	when not all categories are in the same locale.  This is for systems
-	that use a positional notation as opposed to 'name=value' pairs.
+	This symbol, when defined, gives the substring, enclosed in double
+	quotes, used to separate categories in the aggregated string returned
+	by setlocale(LC_ALL, NULL) when not all categories are in the same
+	locale.  This is for systems that use a positional notation as opposed
+	to 'name=value' pairs.  For example, at the time this was written, the
+	value in config.sh for FreeBSD boxes is:
+            perl_lc_all_separator='"/"'
 
 PERL_PATCHLEVEL (Oldsyms.U):
 	This symbol reflects the patchlevel, if available. Will usually
Index: gnu/usr.bin/perl/Porting/Maintainers.pl
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/Maintainers.pl,v
diff -u -p -a -u -p -r1.30 Maintainers.pl
--- gnu/usr.bin/perl/Porting/Maintainers.pl	26 Dec 2025 22:15:22 -0000	1.30
+++ gnu/usr.bin/perl/Porting/Maintainers.pl	29 Mar 2026 16:31:42 -0000
@@ -231,8 +231,8 @@ our %Modules = (
     },
 
     'Compress::Raw::Zlib' => {
-        'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.213.tar.gz',
-        'SYNCINFO'     => 'jkeenan on Wed Aug 28 13:58:29 2024',
+        'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.222.tar.gz',
+        'SYNCINFO'     => 'jkeenan on Wed Mar 11 21:59:54 2026',
         'FILES'    => q[cpan/Compress-Raw-Zlib],
         'EXCLUDED' => [
             qr{^examples/},
@@ -240,7 +240,8 @@ our %Modules = (
             qr{^t/meta},
             qw( t/000prereq.t
                 t/99pod.t
-                ),
+                SECURITY.md
+            ),
         ],
     },
 
@@ -249,9 +250,9 @@ our %Modules = (
         'SYNCINFO'     => 'jkeenan on Fri Jan 17 14:43:53 2025',
         'FILES'        => q[cpan/Config-Perl-V],
         'EXCLUDED'     => [qw(
-		examples/show-v.pl
-		SECURITY.md
-		)],
+            examples/show-v.pl
+            SECURITY.md
+        )],
     },
 
     'constant' => {
@@ -973,6 +974,11 @@ our %Modules = (
             qw{.ChangeLog.swp},
             qr{^\.github/}
         ],
+
+        'CUSTOMIZED'   => [
+	    # Customized by 6ea7dace3401e25dcf8318146be82c03e07a6a72
+	    'lib/Pod/Simple/HTMLLegacy.pm',
+	],
     },
 
     'Pod::Usage' => {
@@ -1312,6 +1318,9 @@ our %Modules = (
         # only necessary with the CPAN release.
         'CUSTOMIZED'   => [
             'lib/version.pm',
+
+            # Customized by ba04a9040af061424b6d6f0b1e888cd3ce4b3d9f
+            'vutil.c',
          ],
 
         'MAP' => {
Index: gnu/usr.bin/perl/Porting/config.sh
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/config.sh,v
diff -u -p -a -u -p -r1.20 config.sh
--- gnu/usr.bin/perl/Porting/config.sh	26 Dec 2025 22:14:13 -0000	1.20
+++ gnu/usr.bin/perl/Porting/config.sh	29 Mar 2026 16:31:42 -0000
@@ -45,8 +45,8 @@ api_subversion='0'
 api_version='42'
 api_versionstring='5.42.0'
 ar='ar'
-archlib='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath'
-archlibexp='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath'
+archlib='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath'
+archlibexp='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath'
 archname64=''
 archname='x86_64-linux-thread-multi-quadmath'
 archobjs=''
@@ -863,7 +863,7 @@ incpath=''
 incpth='/usr/lib64/gcc/x86_64-suse-linux/13/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/13/include-fixed /usr/x86_64-suse-linux/include /usr/include'
 inews=''
 initialinstalllocation='/pro/bin'
-installarchlib='/pro/lib/perl5/5.42.0/x86_64-linux-thread-multi-quadmath'
+installarchlib='/pro/lib/perl5/5.42.2/x86_64-linux-thread-multi-quadmath'
 installbin='/pro/bin'
 installhtml1dir=''
 installhtml3dir=''
@@ -871,13 +871,13 @@ installman1dir='/pro/local/man/man1'
 installman3dir='/pro/local/man/man3'
 installprefix='/pro'
 installprefixexp='/pro'
-installprivlib='/pro/lib/perl5/5.42.0'
+installprivlib='/pro/lib/perl5/5.42.2'
 installscript='/pro/bin'
-installsitearch='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath'
+installsitearch='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath'
 installsitebin='/pro/bin'
 installsitehtml1dir=''
 installsitehtml3dir=''
-installsitelib='/pro/lib/perl5/site_perl/5.42.0'
+installsitelib='/pro/lib/perl5/site_perl/5.42.2'
 installsiteman1dir='/pro/local/man/man1'
 installsiteman3dir='/pro/local/man/man3'
 installsitescript='/pro/bin'
@@ -1005,7 +1005,7 @@ perl_static_inline='static __inline__'
 perl_thread_local='_Thread_local'
 perladmin='hmbrand@cpan.org'
 perllibs='-lpthread -ldl -lm -lcrypt -lutil -lc -lquadmath'
-perlpath='/pro/bin/perl5.42.0'
+perlpath='/pro/bin/perl5.42.2'
 pg='pg'
 phostname='hostname'
 pidtype='pid_t'
@@ -1014,8 +1014,8 @@ pmake=''
 pr=''
 prefix='/pro'
 prefixexp='/pro'
-privlib='/pro/lib/perl5/5.42.0'
-privlibexp='/pro/lib/perl5/5.42.0'
+privlib='/pro/lib/perl5/5.42.2'
+privlibexp='/pro/lib/perl5/5.42.2'
 procselfexe='"/proc/self/exe"'
 ptrsize='8'
 quadkind='2'
@@ -1080,17 +1080,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 0'
 sig_size='68'
 signal_t='void'
-sitearch='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath'
-sitearchexp='/pro/lib/perl5/site_perl/5.42.0/x86_64-linux-thread-multi-quadmath'
+sitearch='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath'
+sitearchexp='/pro/lib/perl5/site_perl/5.42.2/x86_64-linux-thread-multi-quadmath'
 sitebin='/pro/bin'
 sitebinexp='/pro/bin'
 sitehtml1dir=''
 sitehtml1direxp=''
 sitehtml3dir=''
 sitehtml3direxp=''
-sitelib='/pro/lib/perl5/site_perl/5.42.0'
+sitelib='/pro/lib/perl5/site_perl/5.42.2'
 sitelib_stem='/pro/lib/perl5/site_perl'
-sitelibexp='/pro/lib/perl5/site_perl/5.42.0'
+sitelibexp='/pro/lib/perl5/site_perl/5.42.2'
 siteman1dir='/pro/local/man/man1'
 siteman1direxp='/pro/local/man/man1'
 siteman3dir='/pro/local/man/man3'
@@ -1118,7 +1118,7 @@ st_dev_sign='1'
 st_dev_size='8'
 st_ino_sign='1'
 st_ino_size='8'
-startperl='#!/pro/bin/perl5.42.0'
+startperl='#!/pro/bin/perl5.42.2'
 startsh='#!/bin/sh'
 static_ext=' '
 stdchar='char'
@@ -1130,7 +1130,7 @@ stdio_ptr='((fp)->_ptr)'
 stdio_stream_array=''
 strerror_r_proto='REENTRANT_PROTO_B_IBW'
 submit=''
-subversion='0'
+subversion='2'
 sysman='/usr/share/man/man1'
 sysroot=''
 tail=''
@@ -1233,8 +1233,8 @@ vendorprefix=''
 vendorprefixexp=''
 vendorscript=''
 vendorscriptexp=''
-version='5.42.0'
-version_patchlevel_string='version 42 subversion 0'
+version='5.42.2'
+version_patchlevel_string='version 42 subversion 2'
 versiononly='define'
 vi=''
 xlibpth='/usr/lib/386 /lib/386 /usr/lib64/gcc/x86_64-suse-linux/13 /usr/lib64/gcc/x86_64-suse-linux/13/../../../../lib64 /usr/lib64/gcc/x86_64-suse-linux/13/../../..'
@@ -1245,7 +1245,7 @@ zcat=''
 zip='zip'
 PERL_REVISION=5
 PERL_VERSION=42
-PERL_SUBVERSION=0
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=42
 PERL_API_SUBVERSION=0
Index: gnu/usr.bin/perl/Porting/config_H
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/config_H,v
diff -u -p -a -u -p -r1.32 config_H
--- gnu/usr.bin/perl/Porting/config_H	26 Dec 2025 22:14:13 -0000	1.32
+++ gnu/usr.bin/perl/Porting/config_H	29 Mar 2026 16:31:42 -0000
@@ -1239,8 +1239,8 @@
  *	This symbol contains the ~name expanded version of ARCHLIB, to be used
  *	in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define ARCHLIB "/opt/perl/lib/5.42.0/x86_64-linux"		/**/
-#define ARCHLIB_EXP "/opt/perl/lib/5.42.0/x86_64-linux"		/**/
+#define ARCHLIB "/opt/perl/lib/5.42.2/x86_64-linux"		/**/
+#define ARCHLIB_EXP "/opt/perl/lib/5.42.2/x86_64-linux"		/**/
 
 /* BIN:
  *	This symbol holds the path of the bin directory where the package will
@@ -1293,8 +1293,8 @@
  *	This symbol contains the ~name expanded version of PRIVLIB, to be used
  *	in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define PRIVLIB "/opt/perl/lib/5.42.0"		/**/
-#define PRIVLIB_EXP "/opt/perl/lib/5.42.0"		/**/
+#define PRIVLIB "/opt/perl/lib/5.42.2"		/**/
+#define PRIVLIB_EXP "/opt/perl/lib/5.42.2"		/**/
 
 /* SITEARCH:
  *	This symbol contains the name of the private library for this package.
@@ -1311,8 +1311,8 @@
  *	This symbol contains the ~name expanded version of SITEARCH, to be used
  *	in programs that are not prepared to deal with ~ expansion at run-time.
  */
-#define SITEARCH "/opt/perl/lib/site_perl/5.42.0/x86_64-linux"		/**/
-#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.42.0/x86_64-linux"		/**/
+#define SITEARCH "/opt/perl/lib/site_perl/5.42.2/x86_64-linux"		/**/
+#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.42.2/x86_64-linux"		/**/
 
 /* SITELIB:
  *	This symbol contains the name of the private library for this package.
@@ -1334,8 +1334,8 @@
  *	removed.  The elements in inc_version_list (inc_version_list.U) can
  *	be tacked onto this variable to generate a list of directories to search.
  */
-#define SITELIB "/opt/perl/lib/site_perl/5.42.0"		/**/
-#define SITELIB_EXP "/opt/perl/lib/site_perl/5.42.0"		/**/
+#define SITELIB "/opt/perl/lib/site_perl/5.42.2"		/**/
+#define SITELIB_EXP "/opt/perl/lib/site_perl/5.42.2"		/**/
 #define SITELIB_STEM "/opt/perl/lib/site_perl"		/**/
 
 /* PERL_VENDORARCH:
@@ -4109,7 +4109,7 @@
  *	script to make sure (one hopes) that it runs with perl and not
  *	some shell.
  */
-#define STARTPERL "#!/opt/perl/bin/perl5.42.0"		/**/
+#define STARTPERL "#!/opt/perl/bin/perl5.42.2"		/**/
 
 /* HAS_STDIO_STREAM_ARRAY:
  *	This symbol, if defined, tells that there is an array
Index: gnu/usr.bin/perl/Porting/epigraphs.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/epigraphs.pod,v
diff -u -p -a -u -p -r1.16 epigraphs.pod
--- gnu/usr.bin/perl/Porting/epigraphs.pod	26 Dec 2025 22:14:13 -0000	1.16
+++ gnu/usr.bin/perl/Porting/epigraphs.pod	29 Mar 2026 16:31:42 -0000
@@ -17,6 +17,121 @@ Consult your favorite dictionary for det
 
 =head1 EPIGRAPHS
 
+=head2 v5.43.9 - Mary Ann Evans (under pen name George Eliot), "Middlemarch", 1872
+
+L<Announced on 2026-03-20 by Eric Herman|https://www.nntp.perl.org/group/perl.perl5.porters/2026/03/msg270813.html>
+
+  "the growing good of the world is partly dependent on unhistoric acts;
+  and that things are not so ill with you and me as they might have been,
+  is half owing to the number who lived faithfully a hidden life"
+
+=head2 v5.43.8 - Raymond Chandler, "The Big Sleep"
+
+L<Announced on 2026-02-20 by Richard Leach|https://www.nntp.perl.org/group/perl.perl5.porters/2026/02/msg270752.html>
+
+  "Would you have a Ben Hur, 1860, Third Edition, the one with the
+  duplicated line on page 116?"
+
+=head2 v5.43.7 - Vajra Chandrasekera, "The Saint of Bright Doors"
+
+L<Announced on 2026-01-19 by Max Maischein|https://www.nntp.perl.org/group/perl.perl5.porters/2026/01/msg270646.html>
+
+"When this door translates", Pipra says, pointing at it. "This side will be
+either the front or the back of the bright door. If it's the back, the door
+will vanish - we want to know what that looks like. Does it pop out of
+existence? Does it make a noise? Is there a puff of air? A farting sound?
+
+=head2 v5.43.6 - Christopher Hitchens, "Mortality"
+
+L<Announced on 2025-12-20 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/12/msg270596.html>
+
+For me, to remember friendship is to recall those conversations that it
+seemed a sin to break off: the ones that made the sacrifice of the
+following day a trivial one.
+
+=head2 v5.43.5 - Jean Giono
+
+L<Announced on 2025-11-20 by Thibault Duponchelle|https://www.nntp.perl.org/group/perl.perl5.porters/2025/11/msg270513.html>
+
+He who despises himself will never be happy.
+
+=head2 v5.43.4 - Helen Keller 1903, quoting John Richard Green 1870
+
+L<Announced on 2025-10-23 by Eric Herman|https://www.nntp.perl.org/group/perl.perl5.porters/2025/10/msg270412.html>
+
+Green, the historian, tells us that the world is moved along, not only
+by the mighty shoves of its heroes, but also by the aggregate of the
+tiny pushes of each honest worker; and that thought alone suffices to
+guide me in this dark world and wide.
+
+=head2 v5.43.3 - Doc Brown, "Back to the Future"
+
+L<Announced on 2025-09-23 by Thibault Duponchelle|https://www.nntp.perl.org/group/perl.perl5.porters/2025/09/msg270333.html>
+
+  Where we're going, we don't need roads.
+
+=head2 v5.43.2 - David Weber, "On Basilisk Station"
+
+L<Announced on 2025-08-20 by Karen Etheridge|https://www.nntp.perl.org/group/perl.perl5.porters/2025/08/msg270238.html>
+
+  "The bigger the lie, apparently, the more likely the uninformed were to
+  accept it, simply because they couldn't believe any government would tell
+  such an absurd story unless it were true."
+
+=head2 v5.43.1 - Ed Conway, "Material World"
+
+L<Announced on 2025-07-20 by Richard Leach|https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270117.html>
+
+  The water from the brine is evaporated in enormous hot vessels,
+  which leave the salt about the same consistency as wet sand.
+  After a run through another oven, what emerges are glistening
+  pure crystals of salt. I run my hands through the grains as
+  they emerge, surprised for a moment by how hot they are to touch.
+    'This is ultra fine,' says Joe. 'It goes into Wotsits.'
+
+=head2 v5.42.2-RC1 - Edgar Allan Poe, "The Murders in the Rue Morgue" (in "Tales of Mystery and Imagination")
+
+L<Announced on 2026-03-22 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2026/03/msg270828.html>
+
+Whist has long been noted for its influence upon what is termed the
+calculating power; and men of the highest order of intellect have been
+known to take an apparently unaccountable delight in it, while eschewing
+chess as frivolous.  Beyond doubt there is nothing of a similar nature
+so greatly tasking the faculty of analysis.  The best chess player in
+Christendom may be little more than the best player of chess; but
+proficiency in whist implies capacity for success in all those more
+important undertakings where mind struggles with mind.
+
+=head2 v5.42.1 - Andrew Benedict, "The Wall-to-Wall Grave" (in "Alfred Hitchcock presents: Stories my mother never told me, Part One")
+
+L<Announced on 2026-03-08 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2026/03/msg270767.html>
+
+  'There are worse crimes than murder,' said the small man in the grey
+suit.  'And there are worse punishments than the electric chair.'
+[...]
+  'Civilization?' the little man questioned, as the bartender drew my
+beer.  'What is it, anyway? It's a carefully cultivated myth.  We are
+just savages living in upholstered caves.  Give any man sufficient
+provocation and the barbarian will emerge.'
+
+=head2 v5.42.1-RC1 - "Saki" (H. H. Munro), "Sredni Vashtar" (in "Alfred Hitchcock presents: 'Stories they wouldn't let me do on TV'")
+
+L<Announced on 2026-02-22 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2026/02/msg270754.html>
+
+In the shed that evening there was an innovation in the worship of the
+hutch-god.  Conradin had been wont to chant his praises, tonight he
+asked a boon.
+"Do one thing for me, Sredni Vashtar."
+The thing was not specified.  As Sredni Vashtar was a god he must be
+supposed to know.  And choking back a sob as he looked at the other
+empty corner Conradin went back to the world he so hated.
+
+=head2 v5.42.0 - Douglas Adams, "The Hitchhiker's Guide to the Galaxy"
+
+L<Announced on 2025-07-03 by Philippe Bruhat (BooK)|https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270067.html>
+
+  "Forty-two," said Deep Thought, with infinite majesty and calm.
+
 =head2 v5.42.0-RC3 - Bernard de Chartres
 
 L<Announced on 2025-07-01 by Thibault Duponchelle|https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270063.html>
@@ -152,6 +267,49 @@ L<Announced on 2024-07-02 by Philippe Br
   is essential to progress; for, if you know too much, you won't try
   the thing.
 
+=head2 v5.40.4-RC1 - Edgar Allan Poe, "The Fall of the House of Usher" (in "Tales of Mystery and Imagination")
+
+L<Announced on 2026-03-22 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2026/03/msg270827.html>
+
+To an anomalous species of terror I found him a bounden slave.  "I shall
+perish", said he, "I must perish in this deplorable folly.  Thus, thus,
+and not otherwise, shall I be lost.  I dread the events of the future,
+not in themselves, but in their results.  I shudder at the thought of
+any, even the most trivial, incident, which may operate upon this
+intolerable agitation of soul.  I have, indeed, no abhorrence of danger,
+except in its absolute effect--in terror.  In this unnerved, in this
+pitiable, condition I feel that the period will sooner or later arrive
+when I must abandon life and reason together, in some struggle with the
+grim phantasm, FEAR."
+
+=head2 v5.40.3 - J. M. Roberts, "The Penguin History of Europe"
+
+L<Announced on 2025-08-03 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/08/msg270153.html>
+
+The Portuguese were already fairly familiar with oceanic waters when
+Prince Henry began to mount a series of exploratory voyages in another
+direction. [...] Henry died in 1460, but by then his countrymen were
+ready to go on south.  In 1473 they crossed the Equator and in 1487
+reached the Cape of Good Hope.  Ahead lay the Indian Ocean; Arabs had
+long traded across it and pilots were available.  Beyond it lay even
+richer sources of spices.  In 1498 Vasco da Gama picked up an Omani
+pilot on the east African coast and set off for Asia.  In May he dropped
+anchor off Calicut, on the west coast of India.  For the first time,
+Asia was in direct sea-communication with Europe.
+
+=head2 v5.40.3-RC1 - J. M. Roberts, "The Penguin History of Europe"
+
+L<Announced on 2025-07-21 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270122.html>
+
+In 1522, thirty years after Columbus' landfall in the Bahamas, another
+ship sailing west in the service of Spain completed the first voyage
+round the world.  It had set out under the command of a Portuguese,
+Magellan, who had got as far as the Philippines, where he was killed.
+By then he had discovered and sailed through the straits named after him
+and with this voyage and its demonstration that the great oceans were
+all interconnected, the prologue to the European age can be considered
+over.
+
 =head2 v5.40.2 - E. H. Gombrich, trans. Caroline Mustill, "A Little History of the World"
 
 L<Announced on 2025-04-13 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/04/msg269803.html>
@@ -327,6 +485,35 @@ counterparts across the Atlantic were bu
 in a Civil War, they embarked on the construction of the Metropolitan
 Line knowing only one thing for certain - there was no way they were
 going to be able to run steam trains through it.
+
+=head2 v5.38.5 - J. M. Roberts, "The Penguin History of Europe"
+
+L<Announced on 2025-08-03 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/08/msg270152.html>
+
+In 1495 the first map showing [Columbus's] discoveries appeared, with
+Cuba properly marked as an island and not (as Columbus had made his crew
+swear it was) part of the Asian mainland. [...] A further important step
+followed in 1502, when an Italian in a Portuguese vessel visiting the
+coast of what is now Brazil struck southward to sail as far as the
+river Plate.  Amerigo Vespucci's second voyage demonstrated conclusively
+that a whole continent lay to the south of the first great discoveries.
+Five years later a German geographer named the new continent in his
+honour - America - and the name was later applied to the northern
+continent, too.  Not until 1726, though, was it to be demonstrated for
+certain that it was not joined to Asia in the region of the Bering
+Straits.
+
+=head2 v5.38.5-RC1 - J. M. Roberts, "The Penguin History of Europe"
+
+L<Announced on 2025-07-21 by Steve Hay|https://www.nntp.perl.org/group/perl.perl5.porters/2025/07/msg270121.html>
+
+Columbus set sail in 1492 and after 69 days his three little ships made
+a landfall in the Bahamas.  A fortnight later he came to Cuba, which he
+named Hispaniola, before returning to Spain.  The following year he came
+back to explore the islands known ever since as the West Indies (whose
+name commemorates Columbus' tenacious belief that he had reached Asia).
+His confident leap in the dark had changed world history.  Without
+knowing it he had discovered a new world.
 
 =head2 v5.38.4 - E. H. Gombrich, trans. Caroline Mustill, "A Little History of the World"
 
Index: gnu/usr.bin/perl/Porting/perldelta_template.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/perldelta_template.pod,v
diff -u -p -a -u -p -r1.16 perldelta_template.pod
--- gnu/usr.bin/perl/Porting/perldelta_template.pod	26 Dec 2025 22:14:13 -0000	1.16
+++ gnu/usr.bin/perl/Porting/perldelta_template.pod	29 Mar 2026 16:31:42 -0000
@@ -406,7 +406,7 @@ died, add a short obituary here.
 
 XXX Generate this with:
 
-  perl Porting/acknowledgements.pl v5.42.0..HEAD
+  perl Porting/acknowledgements.pl v5.42.2..HEAD
 
 =head1 Reporting Bugs
 
Index: gnu/usr.bin/perl/Porting/release_managers_guide.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/release_managers_guide.pod,v
diff -u -p -a -u -p -r1.14 release_managers_guide.pod
--- gnu/usr.bin/perl/Porting/release_managers_guide.pod	26 Dec 2025 22:14:13 -0000	1.14
+++ gnu/usr.bin/perl/Porting/release_managers_guide.pod	29 Mar 2026 16:31:42 -0000
@@ -3,7 +3,6 @@
 =head1 NAME
 
 release_managers_guide - Releasing a new version of perl 5.x
-
 Note that things change at each release, so there may be new things not
 covered here, or tools may need updating.
 
@@ -102,6 +101,9 @@ key steps are missing. If you do use you
 needs to be taken when setting/pushing the tag and doing the merge
 (do B<not> use a PR).
 
+As you follow these steps, please record notes of anything that you found
+to be unclear; improving this guide is an important part of releasing.
+
 =head2 Release types
 
 =over 4
@@ -404,7 +406,7 @@ This comes down to:
 =head3 Monitor smoke tests for failures
 
 Similarly, monitor the smoking of core tests, and try to fix.  See
-L<CoreSmokeDB Web|https://perl5.test-smoke.org/>, L<Perl Smoke Web|http://perl.develop-help.com> 
+L<CoreSmokeDB Web|https://perl5.test-smoke.org/>, L<Perl Smoke Web|http://perl.develop-help.com>
 and L<Smoke Status Report|https://tux.nl/perl5/smoke/index.html> for a summary. See also
 L<Raw Reports Mailing List|https://www.nntp.perl.org/group/perl.daily-build.reports/> which has emailed raw reports.
 
@@ -465,6 +467,20 @@ When doing a MAINT release, check that p
 Perl Steering Council and Core Team members, in case they have changed
 since the corresponding stable release has been shipped.
 
+=for checklist skip MAINT BLEAD-POINT
+
+=head3 Merge BLEAD-POINT perldeltas
+
+When doing the first RC for BLEAD-FINAL, all perldeltas from the 5.X series
+must be merged into F<pod/perldelta.pod>. The process starts with
+
+    ./perl -Ilib Porting/merge-deltas.pl
+
+The resulting F<pod/perldelta.pod> will need to be edited.  In particular,
+lists will need to be merged.  Sections which were describe changes which
+were reverted will need to be removed.  Some items may benefit from being
+merged into a new summary.
+
 =head3 Update perldelta
 
 Get perldelta in a mostly finished state.
@@ -476,17 +492,15 @@ time can save you from having to work ou
 release process.
 
 Read F<Porting/how_to_write_a_perldelta.pod>, and try to make sure that
-every section it lists is, if necessary, populated and complete. Copy
-edit the whole document.
+every section it lists is, if necessary, populated and complete.
 
 You won't be able to automatically fill in the "Updated Modules" section until
 after L<Module::CoreList> is updated (as described below in
 L</"Update Module::CoreList">).
 
-=head3 Bump the version number
+=for checklist skip BLEAD-POINT
 
-Do not do this yet for a BLEAD-POINT release! You will do this at the end of
-the release process (after building the final tarball, tagging etc).
+=head3 Bump the version number
 
 Increase the version number (e.g. from 5.12.0 to 5.12.1).
 
@@ -511,9 +525,9 @@ C<5.10.0>-type strings, some of which ne
 some of which need to be left unchanged.
 See below in L</"Update INSTALL"> for more details.
 
-For the first RC release leading up to a BLEAD-FINAL release, update the
-description of which releases are now "officially" supported in
-F<pod/perlpolicy.pod>.
+For the first RC release leading up to a BLEAD-FINAL release, update
+F<pod/perlpolicy.pod>: both the version support status table and the
+description of which releases are now "officially" supported.
 
 When doing a BLEAD-POINT or BLEAD-FINAL release, also make sure the
 C<PERL_API_*> constants in F<patchlevel.h> are in sync with the version
@@ -533,7 +547,7 @@ Test your changes:
  $ git clean -xdf   # careful if you don't have local files to keep!
  $ ./Configure -des -Dusedevel
  $ make
- $ make test
+ $ make test_harness
 
 Do note that at this stage, porting tests will fail. They will continue
 to fail until you've updated Module::CoreList, as described below.
@@ -547,7 +561,7 @@ Commit your changes:
  $ git commit -a -m 'Bump the perl version in various places for 5.X.Y'
 
 At this point you may want to compare the commit with a previous bump to
-see if they look similar.  See commit f7cf42bb69 for an example of a
+see if they look similar.  See commit L<f7cf42bb69|https://github.com/Perl/perl5/commit/f7cf42bb69> for an example of a
 previous version bump.
 
 When the version number is bumped, you should also update Module::CoreList
@@ -578,7 +592,10 @@ blead release, so you may find nothing t
 
 =head3 Update AUTHORS
 
-The AUTHORS file can be updated by running F<Porting/updateAUTHORS.pl>.
+The AUTHORS file can be updated by running:
+
+ $ perl Porting/updateAUTHORS.pl
+
 This shouldn't really be necessary anymore, and in theory nothing should
 change as our CI should not pass if a commit would result in AUTHORS
 needing to change, but do it anyway to be sure. Make sure all your changes
@@ -645,6 +662,18 @@ permissions aren't a problem, delete the
 This section describes the actions required to make a release
 that are performed near to, or on the actual release day.
 
+=head3 Optimize your local setup
+
+You will be rebuilding perl quite often, so it makes sense to speed up
+the building and testing by running it in parallel. For that, you can
+optionally set the following environment variables to appropriate values
+for your machine:
+
+  export PERL_TEST_HARNESS_ASAP=1
+  export HARNESS_OPTIONS=j8
+  export TEST_JOBS=8
+  export MAKEFLAGS=-j12
+
 =head3 Re-check earlier actions
 
 Review all the actions in the previous section,
@@ -717,54 +746,32 @@ F<dist/Module-CoreList/lib/Module/CoreLi
 
 =head4 Update C<Module::CoreList> with module version data for the new release
 
-Note that if this is a MAINT release, you should run the following actions
-from the maint branch, but commit the C<CoreList.pm> changes in
-I<blead> and subsequently cherry-pick any releases since the last
-maint release and then your recent commit.  XXX need a better example
-
-[ Note that the procedure for handling Module::CoreList in maint branches
-is a bit complex, and the RMG currently don't describe a full and
-workable approach. The main issue is keeping Module::CoreList
-and its version number synchronised across all maint branches, blead and
-CPAN, while having to bump its version number for every RC release.
-See this brief p5p thread:
-
- Message-ID: <20130311174402.GZ2294@iabyn.com>
-
-If you can devise a workable system, feel free to try it out, and to
-update the RMG accordingly!
-
-DAPM May 2013 ]
+For BLEAD-POINT, RC and BLEAD-FINAL, run:
 
-F<corelist.pl> uses www.cpan.org to verify information about dual-lived
-modules on CPAN. It can use a full, local CPAN mirror and/or fall back
-on HTTP::Tiny to fetch package metadata remotely.
-
-(If you'd prefer to have a full CPAN mirror, see
-L<How to mirror CPAN|https://www.cpan.org/misc/how-to-mirror.html>)
+ $ ./perl -Ilib Porting/corelist.pl cpan
 
-Change to your perl checkout, and if necessary,
+Check those files over carefully:
 
- $ make
+ $ git diff dist/Module-CoreList/lib/Module/CoreList.pm
+ $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm
 
-Then, If you have a local CPAN mirror, run:
+If you have a L<local CPAN mirror|https://www.cpan.org/misc/how-to-mirror.html>, run:
 
  $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
 
-Otherwise, run:
+For MAINT, the prodecure is not straightforward and implies to pick past
+updates (e.g. from BLEAD-POINT) into the corelist.
 
- $ ./perl -Ilib Porting/corelist.pl cpan
-
-This will chug for a while, possibly reporting various warnings about
-badly-indexed CPAN modules unrelated to the modules actually in core.
-Assuming all goes well, it will update
-F<dist/Module-CoreList/lib/Module/CoreList.pm> and possibly
-F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm>.
+In practice, you should run the previous actions
+from the maint branch, but commit the C<CoreList.pm> changes in
+I<blead> and subsequently cherry-pick any releases since the last
+maint release and then your recent commit.
 
-Check those files over carefully:
+The main issue is keeping Module::CoreList
+and its version number synchronised across all maint branches, blead and
+CPAN, while having to bump its version number for every RC release.
 
- $ git diff dist/Module-CoreList/lib/Module/CoreList.pm
- $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm
+See L<Handling Module::CoreList in MAINT branches (Dave Mitchell)|https://www.nntp.perl.org/group/perl.perl5.porters/2013/03/msg200007.html>.
 
 =head4 Bump version in Module::CoreList F<Changes>
 
@@ -886,7 +893,7 @@ Then build a clean perl and do a full te
  $ git clean -dxf
  $ ./Configure -Dusedevel -des
  $ make
- $ make test
+ $ make test_harness
 
 Once all tests pass, commit your changes.
 
@@ -949,8 +956,6 @@ Be sure to commit your changes:
 
 =head3 Update patchlevel.h
 
-I<You MUST SKIP this step for a BLEAD-POINT release>
-
 Update F<patchlevel.h> to add a C<-RC1>-or-whatever string; or, if this is
 a final release, remove it. For example:
 
@@ -984,15 +989,21 @@ Build perl, then make sure it passes its
  # or if it's an odd-numbered version:
  $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.X.Y-pretest
 
- $ make test install
+ $ make test ; make install
+
+For an odd-numbered version, perl will install itself as
+C</tmp/perl-5.X.Y-pretest/bin/perl5.X.Y> rather than
+C</tmp/perl-5.X.Y-pretest/bin/perl>.
 
 Check that the output of C</tmp/perl-5.X.Y-pretest/bin/perl -v> and
 C</tmp/perl-5.X.Y-pretest/bin/perl -V> are as expected,
 especially as regards version numbers, patch and/or RC levels, and @INC
-paths. Note that as they have been built from a git working
-directory, they will still identify themselves using git tags and
-commits. (Note that for an odd-numbered version, perl will install
-itself as C<perl5.X.Y>). C<perl -v> will identify itself as:
+paths.
+
+Note that as they have been built from a git working directory, they
+will still identify themselves using git tags and commits.
+
+C<perl -v> (or C<perl5.X.Y -v>) will identify itself as:
 
  This is perl 5, version X, subversion Y (v5.X.Y (v5.XX.Z-NNN-gdeadbeef))
 
@@ -1003,9 +1014,9 @@ Then delete the temporary installation.
 
 =head3 Create the release tag
 
-Create the I<annotated> tag identifying this release (e.g.):
+Create the I<annotated> tag identifying this release:
 
- $ git tag v5.21.4 -m 'Perl 5.21.4'
+ $ git tag v5.X.Y -m 'Perl 5.X.Y'
 
 It is B<VERY> important that from this point forward, you not push
 your git changes to the Perl master repository.  If anything goes
@@ -1122,11 +1133,19 @@ paths.
 Note that the results may be different without a F<.git/> directory,
 which is why you should test from the tarball.
 
+=for checklist skip BLEAD-POINT
+
 =head4 Run the Installation Verification Procedure utility
 
  $ bin/perlivp
+ ...
+ All tests successful.
+ $
+
+=for checklist skip RC MAINT BLEAD-FINAL
+
+=head4 Run the Installation Verification Procedure utility
 
- # Or, perhaps:
  $ bin/perlivp5.X.Y
  ...
  All tests successful.
@@ -1154,15 +1173,24 @@ performing these actions:
 
  $ unset PERL5LIB PERL_MB_OPT PERL_LOCAL_LIB_ROOT PERL_MM_OPT
 
+=for checklist skip BLEAD-POINT
+
 =head4 Bootstrap the CPAN client
 
 Bootstrap the CPAN client on the clean install:
 
  $ bin/cpan
 
- # Or, perhaps:
+=for checklist skip RC MAINT BLEAD-FINAL
+
+=head4 Bootstrap the CPAN client
+
+Bootstrap the CPAN client on the clean install:
+
  $ bin/cpan5.X.Y
 
+=for checklist skip BLEAD-POINT
+
 =head4 Install the Inline module with CPAN and test it
 
 Try installing a popular CPAN module that's reasonably complex and that
@@ -1175,7 +1203,23 @@ Check that your perl can run this:
 
  $ bin/perl -lwe "use Inline C => q[int f() { return 42;}]; print f"
  42
- $
+
+=for checklist skip RC MAINT BLEAD-FINAL
+
+=head4 Install the Inline module with CPAN and test it
+
+Try installing a popular CPAN module that's reasonably complex and that
+has dependencies; for example:
+
+ CPAN> install Inline::C
+ CPAN> quit
+
+Check that your perl can run this:
+
+ $ bin/perl5.X.Y -lwe "use Inline C => q[int f() { return 42;}]; print f"
+ 42
+
+=for checklist skip BLEAD-POINT
 
 =head4 Make sure that perlbug works
 
@@ -1193,7 +1237,28 @@ Test L<perlbug> with the following:
  Action (Send/Display/Edit/Subject/Save to File): f
  Name of file to save message in [perlbug.rep]:
 
-and carefully examine the output (in F<perlbug.rep]>), especially
+Then carefully examine the output (in F<perlbug.rep]>), especially
+the "Locally applied patches" section.
+
+=for checklist skip RC MAINT BLEAD-FINAL
+
+=head4 Make sure that perlbug works
+
+Test L<perlbug> with the following:
+
+ $ bin/perlbug5.X.Y
+ ...
+ Subject: test bug report
+ Local perl administrator [yourself]:
+ Editor [vi]:
+ Module:
+ Category [core]:
+ Severity [low]:
+ (edit report)
+ Action (Send/Display/Edit/Subject/Save to File): f
+ Name of file to save message in [perlbug.rep]:
+
+Then carefully examine the output (in F<perlbug.rep]>), especially
 the "Locally applied patches" section.
 
 =for checklist skip BLEAD-POINT
@@ -1261,8 +1326,6 @@ which may be faster.
 
 =head3 Wait for indexing
 
-I<You MUST SKIP this step for RC and BLEAD-POINT>
-
 Wait until you receive notification emails from the PAUSE indexer
 confirming that your uploads have been received.  IMPORTANT -- you will
 probably get an email that indexing has failed, due to module permissions.
@@ -1272,8 +1335,6 @@ This is considered normal.
 
 =head3 Disarm patchlevel.h
 
-I<You MUST SKIP this step for BLEAD-POINT release>
-
 Disarm the F<patchlevel.h> change; for example,
 
   static const char * const local_patches[] = {
@@ -1330,26 +1391,23 @@ You can include the customary link to th
 message reaches the web-visible archives by looking for the X-List-Archive
 header in your message after receiving it back via perl5-porters.
 
+=for checklist skip RC BLEAD-POINT
+
 =head3 Update the link to the latest perl on perlweb
 
-Submit a pull request to L<https://github.com/perlorg/perlweb>.  For a dev
-release, update the link in F<docs/dev/perl5/index.html>.  For a stable
-release, update F<docs/shared/tpl/stats.html>.
+Submit a pull request to L<https://github.com/perlorg/perlweb> to
+update the link in F<docs/shared/tpl/stats.html>.
 
 =for checklist skip RC
 
 =head3 Release schedule
 
-I<You MUST SKIP this step for RC>
-
 Tick the entry for your release in F<Porting/release_schedule.pod>.
 
 =for checklist skip RC
 
 =head3 Module::CoreList nagging
 
-I<You MUST SKIP this step for RC>
-
 Remind the current maintainer of C<Module::CoreList> to push a new release
 to CPAN.
 
@@ -1357,8 +1415,6 @@ to CPAN.
 
 =head3 New perldelta
 
-I<You MUST SKIP this step for RC>
-
 Create a new perldelta.
 
 =over 4
@@ -1370,7 +1426,8 @@ Confirm that you have a clean checkout w
 =item *
 
 Run:
- perl Porting/new-perldelta.pl
+
+ $ perl Porting/new-perldelta.pl
 
 =item *
 
@@ -1378,13 +1435,24 @@ Run the C<git add> commands it outputs t
 
 =item *
 
-Verify that the build still works, by running C<./Configure> and
-C<make test_porting>. (On Win32 use the appropriate make utility).
+Verify that the build still works, by running:
+
+ $ ./Configure
+ $ make test_porting
+
+(On Win32 use the appropriate make utility).
 
 =item *
 
-If F<t/porting/podcheck.t> spots errors in the new F<pod/perldelta.pod>,
-run C<./perl -MTestInit t/porting/podcheck.t | less> for more detail.
+Run:
+
+ $ ./perl t/porting/podcheck.t
+
+If it spots errors in the new F<pod/perldelta.pod>, run:
+
+ $ ./perl -MTestInit t/porting/podcheck.t | less
+
+It will give you more details.
 Skip to the end of its test output to see the options it offers you.
 
 =item *
@@ -1399,11 +1467,15 @@ At this point you may want to compare th
 see if they look similar.  See commit ba03bc34a4 for an example of a
 previous version bump.
 
-=for checklist skip MAINT RC
+=head3 Push commits
+
+Finally, push any commits done above.
+
+ $ git push origin ....
 
-=head3 Bump version
+=for checklist skip BLEAD-POINT RC MAINT
 
-I<You MUST SKIP this step for RC and MAINT>
+=head3 Bump the feature bundles
 
 If this was a BLEAD-FINAL release (i.e. the first release of a new maint
 series, 5.x.0 where x is even), then bump the version in the blead branch
@@ -1416,13 +1488,11 @@ marker); e.g.
       "5.14" => [qw(switch say state unicode_strings)],
  +    "5.15" => [qw(switch say state unicode_strings)],
 
-Run F<regen/feature.pl> to propagate the changes to F<lib/feature.pm>.
+Run:
 
-Then follow the section L</"Bump the version number"> to bump the version
-in the remaining files and test and commit.
+ $ ./perl regen/feature.pl
 
-If this was a BLEAD-POINT release, then just follow the section
-L</"Bump the version number">.
+It will propagate the changes to F<lib/feature.pm>.
 
 After bumping the version, follow the section L</"Update INSTALL"> to
 ensure all version number references are correct.
@@ -1439,6 +1509,56 @@ reports to arise. (The opposite problem 
 introduced later -- shouldn't arise for MAINT releases since they should,
 in theory, only contain bug fixes but never regressions.))
 
+=for checklist skip RC MAINT
+
+=head3 Bump the version number
+
+Increase the version number (e.g. from 5.12.0 to 5.12.1).
+
+There is a tool to semi-automate this process:
+
+ $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1
+
+Remember that this tool is largely just grepping for '5.10.0' or whatever,
+so it will generate false positives. Be careful not change text like
+"this was fixed in 5.10.0"!
+
+Use git status and git diff to select changes you want to keep.
+
+Be particularly careful with F<INSTALL>, which contains a mixture of
+C<5.10.0>-type strings, some of which need bumping on every release, and
+some of which need to be left unchanged.
+See below in L</"Update INSTALL"> for more details.
+
+After editing, you may need to regen opcodes:
+
+ $ ./perl -Ilib regen/opcode.pl
+
+Test your changes:
+
+ $ git clean -xdf   # careful if you don't have local files to keep!
+ $ ./Configure -des -Dusedevel
+ $ make
+ $ make test_harness
+
+Do note that at this stage, porting tests will fail. They will continue
+to fail until you've updated Module::CoreList, as described below.
+
+Commit your changes:
+
+ $ git status
+ $ git diff
+ # Review the delta carefully
+ $ git commit -a -m 'Bump the perl version in various places for 5.X.Y'
+
+At this point you may want to compare the commit with a previous bump to
+see if they look similar.  See commit L<f7cf42bb69|https://github.com/Perl/perl5/commit/f7cf42bb69> for an example of a
+previous version bump.
+
+When the version number is bumped, you should also update Module::CoreList
+(as described in L</"Update Module::CoreList">) to reflect the new
+version number.
+
 =head3 Clean build and test
 
 Run a clean build and test to make sure nothing obvious is broken. This is
@@ -1448,7 +1568,7 @@ executable built with the bumped version
  $ git clean -xdf
  $ ./Configure -des -Dusedevel
  $ make
- $ make test
+ $ make test_harness
 
 In particular, F<Porting/perldelta_template.pod> is intentionally exempted
 from podchecker tests, to avoid false positives about placeholder text.
@@ -1476,18 +1596,10 @@ update its exceptions database.
 
 =back
 
-=head3 Push commits
-
-Finally, push any commits done above.
-
- $ git push origin ....
-
 =for checklist skip BLEAD-POINT MAINT RC
 
 =head3 Create maint branch
 
-I<You MUST SKIP this step for RC, BLEAD-POINT, MAINT>
-
 If this was a BLEAD-FINAL release (i.e. the first release of a new maint
 series, 5.x.0 where x is even), then create a new maint branch based on
 the commit tagged as the current release.
@@ -1501,8 +1613,6 @@ Assuming you're using git 1.7.x or newer
 
 =head3 Copy perldelta.pod to blead
 
-I<You MUST SKIP this step for RC, BLEAD-POINT>
-
 Copy the perldelta.pod for this release into blead; for example:
 
  $ cd ..../blead
@@ -1567,13 +1677,13 @@ and F<dist/Module-CoreList/lib/Module/Co
 
 =item *
 
-If you have a local CPAN mirror, run:
+In most cases, run:
 
- $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
+ $ ./perl -Ilib Porting/corelist.pl cpan
 
-Otherwise, run:
+If you have a L<local CPAN mirror|https://www.cpan.org/misc/how-to-mirror.html>, run:
 
- $ ./perl -Ilib Porting/corelist.pl cpan
+ $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror
 
 This will update F<dist/Module-CoreList/lib/Module/CoreList.pm> and
 F<dist/Module-CoreList/lib/Module/CoreList/Utils.pm> as it did before,
@@ -1583,6 +1693,11 @@ but this time adding new sections for th
 
 Add the new $Module::CoreList::VERSION to
 F<dist/Module-CoreList/Changes>.
+
+=item *
+
+Replace date '????-??-??' per actual planned YYYY-MM-DD in
+F<dist/Module-CoreList/lib/Module/CoreList.pm>.
 
 =item *
 
Index: gnu/usr.bin/perl/Porting/release_schedule.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/release_schedule.pod,v
diff -u -p -a -u -p -r1.13 release_schedule.pod
--- gnu/usr.bin/perl/Porting/release_schedule.pod	26 Dec 2025 22:14:13 -0000	1.13
+++ gnu/usr.bin/perl/Porting/release_schedule.pod	29 Mar 2026 16:31:42 -0000
@@ -11,22 +11,23 @@ release schedules for the next, current 
 of Perl.  Dates with two or more question marks will only be releases if
 deemed necessary by the Steering Council.
 
+=head2 Perl 5.44
+
+  2026-??-??  5.44.0
+
 =head2 Perl 5.42
 
-  2025-??-??  5.42.0
+  2025-07-02  5.42.0  ✓       Philippe Bruhat
+  2026-03-08  5.42.1  ✓       Steve Hay
+  2026-03-29  5.42.2          Steve Hay
 
 =head2 Perl 5.40
 
   2024-06-09  5.40.0  ✓       Graham Knop
   2025-01-18  5.40.1  ✓       Steve Hay
   2025-04-13  5.40.2  ✓       Steve Hay
-
-=head2 Perl 5.38
-
-  2023-07-01  5.38.0  ✓       Ricardo Signes
-  2023-11-29  5.38.2  ✓       Paul Evans
-  2025-01-18  5.38.3  ✓       Steve Hay
-  2025-04-13  5.38.4  ✓       Steve Hay
+  2025-08-03  5.40.3  ✓       Steve Hay
+  2026-03-29  5.40.4          Steve Hay
 
 =head1 DEVELOPMENT RELEASE SCHEDULE
 
@@ -42,25 +43,22 @@ When shipping a release, you should incl
 the next four releases. If a stable version of Perl is released,
 you should reset the version numbers to the next blead series.
 
-=head2 Perl 5.41
+=head2 Perl 5.43
 
-  2024-06-10  5.41.0  ✓       Graham K          (tag only)
-  2024-06-20  5.41.1  ✓       Graham K
-  2024-07-20  5.41.2  ✓       Karen Etheridge
-  2024-08-20  5.41.3  ✓       Philippe Bruhat
-  2024-09-20  5.41.4  ✓       Thibault Duponchelle
-  2024-10-20  5.41.5  ✓       Richard Leach
-  2024-11-20  5.41.6  ✓       Thibault Duponchelle
-  2024-12-20  5.41.7  ✓       Max Maischein
-  2025-01-20  5.41.8  ✓       Steve Hay
-  2025-02-20  5.41.9  ✓       Richard Leach     Contentious changes freeze
-  2025-03-20  5.41.10 ✓       Lukas Mai         User-visible changes to
+  2025-07-04  5.43.0  ✓       Philippe Bruhat   (tag only)
+  2025-07-20  5.43.1  ✓       Richard Leach
+  2025-08-20  5.43.2  ✓       Karen Etheridge
+  2025-09-20  5.43.3  ✓       Thibault Duponchelle
+  2025-10-22  5.43.4  ✓       Eric Herman
+  2025-11-20  5.43.5  ✓       Thibault Duponchelle
+  2025-12-20  5.43.6  ✓       Steve Hay
+  2026-01-19  5.43.7  ✓       Max Maischein
+  2026-02-20  5.43.8  ✓       Richard Leach     Contentious changes freeze
+  2026-03-20  5.43.9  ✓       Eric Herman       User-visible changes to
                                                 correctly functioning
                                                 programs freeze
-  2025-04-20  5.41.11 ✓       Karen Etheridge   Full program freeze
-  2025-04-21  5.41.12 ✓       Karen Etheridge
-  2025-05-28  5.41.13 ✓       Philippe Bruhat
-  2025-0?-??  5.42.0          ?                 New perl!
+  2026-04-20  5.43.10         Philippe Bruhat   Full program freeze
+  2026-05-20  5.44.0                            New perl!
 
 =head1 VICTIMS
 
@@ -81,6 +79,7 @@ consent of the Steering Council.)
   Florian Ragwitz <rafl@debian.org>
   Jesse Luehrs <doy@cpan.org>
   Jesse Vincent <jesse@cpan.org>
+  Karen Etheridge <ether@cpan.org>
   Leon Brocard <acme@astray.com>
   Matt Trout <mst@shadowcat.co.uk>
   Matthew Horsfall <wolfsage@gmail.com>
@@ -92,6 +91,7 @@ consent of the Steering Council.)
   Stevan Little <stevan@cpan.org>
   Steve Hay <steve.m.hay@googlemail.com>
   Tatsuhiko Miyagawa <miyagawa@bulknews.net>
+  Thibault Duponchelle <thibault.duponchelle@gmail.com>
   Tony Cook <tony@develop-help.com>
   Yves Orton <demerphq@gmail.com>
   Ævar Arnfjörð Bjarmason <avar@cpan.org>
Index: gnu/usr.bin/perl/Porting/sync-with-cpan
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/sync-with-cpan,v
diff -u -p -a -u -p -r1.9 sync-with-cpan
--- gnu/usr.bin/perl/Porting/sync-with-cpan	26 Dec 2025 22:14:13 -0000	1.9
+++ gnu/usr.bin/perl/Porting/sync-with-cpan	29 Mar 2026 16:31:42 -0000
@@ -209,7 +209,7 @@ my $package_file = "$tmpdir/$package"; #
 my $type_dir     = "cpan";
 
 my @problematic = (
-    # no current entries as of perl-5.42.0 (July 2025)
+    # no current entries as of perl-5.42.2 (March 2026)
 );
 
 
Index: gnu/usr.bin/perl/Porting/todo.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/Porting/todo.pod,v
diff -u -p -a -u -p -r1.15 todo.pod
--- gnu/usr.bin/perl/Porting/todo.pod	26 Dec 2025 22:14:13 -0000	1.15
+++ gnu/usr.bin/perl/Porting/todo.pod	29 Mar 2026 16:31:42 -0000
@@ -1193,7 +1193,7 @@ L<http://www.xray.mpe.mpg.de/mailing-lis
 =head1 Big projects
 
 Tasks that will get your name mentioned in the description of the "Highlights
-of 5.42.0"
+of 5.42.2"
 
 =head2 make ithreads more robust
 
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm,v
diff -u -p -a -u -p -r1.10 Zlib.pm
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm	26 Dec 2025 22:14:13 -0000	1.10
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm	29 Mar 2026 16:31:42 -0000
@@ -10,7 +10,7 @@ use warnings ;
 use bytes ;
 our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS);
 
-$VERSION = '2.213';
+$VERSION = '2.222';
 $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 
@@ -626,7 +626,7 @@ Compress::Raw::Zlib - Low-Level Interfac
     $d->msg() ;
     $d->get_Strategy();
     $d->get_Level();
-    $d->get_BufSize();
+    $d->get_Bufsize();
 
     ($i, $status) = new Compress::Raw::Zlib::Inflate( [OPT] ) ;
     $status = $i->inflate($input, $output [, $eof]) ;
@@ -638,7 +638,7 @@ Compress::Raw::Zlib - Low-Level Interfac
     $i->total_in() ;
     $i->total_out() ;
     $i->msg() ;
-    $d->get_BufSize();
+    $d->get_Bufsize();
 
     $crc = adler32($buffer [,$crc]) ;
     $crc = crc32($buffer [,$crc]) ;
@@ -923,7 +923,7 @@ C<Z_DEFAULT_STRATEGY>, C<Z_FILTERED> and
 
 Returns the compression level being used.
 
-=head2 B<$d-E<gt>get_BufSize()>
+=head2 B<$d-E<gt>get_Bufsize()>
 
 Returns the buffer size used to carry out the compression.
 
@@ -1215,7 +1215,7 @@ Returns the total number of bytes compre
 
 Returns the total number of uncompressed bytes output from inflate.
 
-=head2 B<$d-E<gt>get_BufSize()>
+=head2 B<$d-E<gt>get_Bufsize()>
 
 Returns the buffer size used to carry out the decompression.
 
@@ -1318,7 +1318,7 @@ Refer to the I<zlib> documentation for m
 Returns the version of the I<zlib> library if this module has been built with the I<zlib> library.
 If this module has been built with I<zlib-ng> in native mode, this function will return a empty string.
 If this module has been built with I<zlib-ng> in compat mode, this function will return the Izlib> API
-verion that I<zlib-ng> is supporting.
+version that I<zlib-ng> is supporting.
 
 =head2 my $version = Compress::Raw::Zlib::zlibng_version();
 
@@ -1637,7 +1637,7 @@ See the Changes file.
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright (c) 2005-2024 Paul Marquess. All rights reserved.
+Copyright (c) 2005-2026 Paul Marquess. All rights reserved.
 
 This program is free software; you can redistribute it and/or
 modify it under the same terms as Perl itself.
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t,v
diff -u -p -a -u -p -r1.4 01version.t
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t	26 Dec 2025 22:14:13 -0000	1.4
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/01version.t	29 Mar 2026 16:31:42 -0000
@@ -33,7 +33,7 @@ SKIP:
 {
     # If running a github workflow that tests upstream zlib/zlib-ng, check we have the version requested
 
-    # Not github or not asking for explicit verson, so skip
+    # Not github or not asking for explicit version, so skip
     skip "Not github", 7
         if ! (defined $ENV{GITHUB_ACTION} && defined $ENV{ZLIB_VERSION}) ;
 
@@ -74,8 +74,15 @@ SKIP:
             '2.1.5' => '1.3.0.zlib-ng',
             '2.1.6' => '1.3.0.zlib-ng',
             '2.1.7' => '1.3.1.zlib-ng',
+            '2.1.8' => '1.3.1.zlib-ng',
             '2.2.0' => '1.3.1.zlib-ng',
             '2.2.1' => '1.3.1.zlib-ng',
+            '2.2.2' => '1.3.1.zlib-ng',
+            '2.2.3' => '1.3.1.zlib-ng',
+            '2.2.4' => '1.3.1.zlib-ng',
+            '2.2.5' => '1.3.1.zlib-ng',
+            '2.3.1' => '1.3.1.zlib-ng',
+            '2.3.2' => '1.3.1.zlib-ng',
         );
 
         my $zv = Compress::Raw::Zlib::zlibng_version();
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c,v
diff -u -p -a -u -p -r1.6 compress.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c	28 Jan 2025 01:06:11 -0000	1.6
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/compress.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* compress.c -- compress a memory buffer
- * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -18,13 +18,19 @@
      compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_BUF_ERROR if there was not enough room in the output buffer,
    Z_STREAM_ERROR if the level parameter is invalid.
+
+     The _z versions of the functions take size_t length arguments.
 */
-int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source,
-                      uLong sourceLen, int level) {
+int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen, const Bytef *source,
+                        z_size_t sourceLen, int level) {
     z_stream stream;
     int err;
     const uInt max = (uInt)-1;
-    uLong left;
+    z_size_t left;
+
+    if ((sourceLen > 0 && source == NULL) ||
+        destLen == NULL || (*destLen > 0 && dest == NULL))
+        return Z_STREAM_ERROR;
 
     left = *destLen;
     *destLen = 0;
@@ -43,23 +49,36 @@ int ZEXPORT compress2(Bytef *dest, uLong
 
     do {
         if (stream.avail_out == 0) {
-            stream.avail_out = left > (uLong)max ? max : (uInt)left;
+            stream.avail_out = left > (z_size_t)max ? max : (uInt)left;
             left -= stream.avail_out;
         }
         if (stream.avail_in == 0) {
-            stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
+            stream.avail_in = sourceLen > (z_size_t)max ? max :
+                                                          (uInt)sourceLen;
             sourceLen -= stream.avail_in;
         }
         err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
     } while (err == Z_OK);
 
-    *destLen = stream.total_out;
+    *destLen = (z_size_t)(stream.next_out - dest);
     deflateEnd(&stream);
     return err == Z_STREAM_END ? Z_OK : err;
 }
-
+int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source,
+                      uLong sourceLen, int level) {
+    int ret;
+    z_size_t got = *destLen;
+    ret = compress2_z(dest, &got, source, sourceLen, level);
+    *destLen = (uLong)got;
+    return ret;
+}
 /* ===========================================================================
  */
+int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen, const Bytef *source,
+                       z_size_t sourceLen) {
+    return compress2_z(dest, destLen, source, sourceLen,
+                       Z_DEFAULT_COMPRESSION);
+}
 int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source,
                      uLong sourceLen) {
     return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
@@ -69,7 +88,12 @@ int ZEXPORT compress(Bytef *dest, uLongf
      If the default memLevel or windowBits for deflateInit() is changed, then
    this function needs to be updated.
  */
+z_size_t ZEXPORT compressBound_z(z_size_t sourceLen) {
+    z_size_t bound = sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+                     (sourceLen >> 25) + 13;
+    return bound < sourceLen ? (z_size_t)-1 : bound;
+}
 uLong ZEXPORT compressBound(uLong sourceLen) {
-    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
-           (sourceLen >> 25) + 13;
+    z_size_t bound = compressBound_z(sourceLen);
+    return (uLong)bound != bound ? (uLong)-1 : (uLong)bound;
 }
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c,v
diff -u -p -a -u -p -r1.8 crc32.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c	28 Jan 2025 01:06:11 -0000	1.8
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* crc32.c -- compute the CRC-32 of a data stream
- * Copyright (C) 1995-2022 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  *
  * This interleaved implementation of a CRC makes use of pipelined multiple
@@ -24,11 +24,18 @@
 #  include <stdio.h>
 #  ifndef DYNAMIC_CRC_TABLE
 #    define DYNAMIC_CRC_TABLE
-#  endif /* !DYNAMIC_CRC_TABLE */
-#endif /* MAKECRCH */
+#  endif
+#endif
+#ifdef DYNAMIC_CRC_TABLE
+#  define Z_ONCE
+#endif
 
 #include "zutil.h"      /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */
 
+#ifdef HAVE_S390X_VX
+#  include "contrib/crc32vx/crc32_vx_hooks.h"
+#endif
+
  /*
   A CRC of a message is computed on N braids of words in the message, where
   each word consists of W bytes (4 or 8). If N is 3, for example, then three
@@ -99,7 +106,8 @@
 #endif
 
 /* If available, use the ARM processor CRC32 instruction. */
-#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8
+#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && \
+    defined(W) && W == 8
 #  define ARMCRC32
 #endif
 
@@ -152,10 +160,10 @@ local z_word_t byte_swap(z_word_t word) 
   Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial,
   reflected. For speed, this requires that a not be zero.
  */
-local z_crc_t multmodp(z_crc_t a, z_crc_t b) {
-    z_crc_t m, p;
+local uLong multmodp(uLong a, uLong b) {
+    uLong m, p;
 
-    m = (z_crc_t)1 << 31;
+    m = (uLong)1 << 31;
     p = 0;
     for (;;) {
         if (a & m) {
@@ -171,12 +179,12 @@ local z_crc_t multmodp(z_crc_t a, z_crc_
 
 /*
   Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been
-  initialized.
+  initialized. n must not be negative.
  */
-local z_crc_t x2nmodp(z_off64_t n, unsigned k) {
-    z_crc_t p;
+local uLong x2nmodp(z_off64_t n, unsigned k) {
+    uLong p;
 
-    p = (z_crc_t)1 << 31;           /* x^0 == 1 */
+    p = (uLong)1 << 31;             /* x^0 == 1 */
     while (n) {
         if (n & 1)
             p = multmodp(x2n_table[k & 31], p);
@@ -204,83 +212,8 @@ local z_crc_t FAR crc_table[256];
    local void write_table64(FILE *, const z_word_t FAR *, int);
 #endif /* MAKECRCH */
 
-/*
-  Define a once() function depending on the availability of atomics. If this is
-  compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in
-  multiple threads, and if atomics are not available, then get_crc_table() must
-  be called to initialize the tables and must return before any threads are
-  allowed to compute or combine CRCs.
- */
-
-/* Definition of once functionality. */
-typedef struct once_s once_t;
-
-/* Check for the availability of atomics. */
-#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
-    !defined(__STDC_NO_ATOMICS__)
-
-#include <stdatomic.h>
-
-/* Structure for once(), which must be initialized with ONCE_INIT. */
-struct once_s {
-    atomic_flag begun;
-    atomic_int done;
-};
-#define ONCE_INIT {ATOMIC_FLAG_INIT, 0}
-
-/*
-  Run the provided init() function exactly once, even if multiple threads
-  invoke once() at the same time. The state must be a once_t initialized with
-  ONCE_INIT.
- */
-local void once(once_t *state, void (*init)(void)) {
-    if (!atomic_load(&state->done)) {
-        if (atomic_flag_test_and_set(&state->begun))
-            while (!atomic_load(&state->done))
-                ;
-        else {
-            init();
-            atomic_store(&state->done, 1);
-        }
-    }
-}
-
-#else   /* no atomics */
-
-/* Structure for once(), which must be initialized with ONCE_INIT. */
-struct once_s {
-    volatile int begun;
-    volatile int done;
-};
-#define ONCE_INIT {0, 0}
-
-/* Test and set. Alas, not atomic, but tries to minimize the period of
-   vulnerability. */
-local int test_and_set(int volatile *flag) {
-    int was;
-
-    was = *flag;
-    *flag = 1;
-    return was;
-}
-
-/* Run the provided init() function once. This is not thread-safe. */
-local void once(once_t *state, void (*init)(void)) {
-    if (!state->done) {
-        if (test_and_set(&state->begun))
-            while (!state->done)
-                ;
-        else {
-            init();
-            state->done = 1;
-        }
-    }
-}
-
-#endif
-
 /* State for once(). */
-local once_t made = ONCE_INIT;
+local z_once_t made = Z_ONCE_INIT;
 
 /*
   Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
@@ -326,7 +259,7 @@ local void make_crc_table(void) {
     p = (z_crc_t)1 << 30;         /* x^1 */
     x2n_table[0] = p;
     for (n = 1; n < 32; n++)
-        x2n_table[n] = p = multmodp(p, p);
+        x2n_table[n] = p = (z_crc_t)multmodp(p, p);
 
 #ifdef W
     /* initialize the braiding tables -- needs x2n_table[] */
@@ -529,11 +462,11 @@ local void braid(z_crc_t ltl[][256], z_w
     int k;
     z_crc_t i, p, q;
     for (k = 0; k < w; k++) {
-        p = x2nmodp((n * w + 3 - k) << 3, 0);
+        p = (z_crc_t)x2nmodp((n * w + 3 - k) << 3, 0);
         ltl[k][0] = 0;
         big[w - 1 - k][0] = 0;
         for (i = 1; i < 256; i++) {
-            ltl[k][i] = q = multmodp(i << 24, p);
+            ltl[k][i] = q = (z_crc_t)multmodp(i << 24, p);
             big[w - 1 - k][i] = byte_swap(q);
         }
     }
@@ -548,7 +481,7 @@ local void braid(z_crc_t ltl[][256], z_w
  */
 const z_crc_t FAR * ZEXPORT get_crc_table(void) {
 #ifdef DYNAMIC_CRC_TABLE
-    once(&made, make_crc_table);
+    z_once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
     return (const z_crc_t FAR *)crc_table;
 }
@@ -572,9 +505,8 @@ const z_crc_t FAR * ZEXPORT get_crc_tabl
 #define Z_BATCH_ZEROS 0xa10d3d0c    /* computed from Z_BATCH = 3990 */
 #define Z_BATCH_MIN 800             /* fewest words in a final batch */
 
-unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf,
-                              z_size_t len) {
-    z_crc_t val;
+uLong ZEXPORT crc32_z(uLong crc, const unsigned char FAR *buf, z_size_t len) {
+    uLong val;
     z_word_t crc1, crc2;
     const z_word_t *word;
     z_word_t val0, val1, val2;
@@ -585,7 +517,7 @@ unsigned long ZEXPORT crc32_z(unsigned l
     if (buf == Z_NULL) return 0;
 
 #ifdef DYNAMIC_CRC_TABLE
-    once(&made, make_crc_table);
+    z_once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
 
     /* Pre-condition the CRC */
@@ -640,7 +572,7 @@ unsigned long ZEXPORT crc32_z(unsigned l
         }
         word += 3 * last;
         num -= 3 * last;
-        val = x2nmodp(last, 6);
+        val = x2nmodp((int)last, 6);
         crc = multmodp(val, crc) ^ crc1;
         crc = multmodp(val, crc) ^ crc2;
     }
@@ -691,13 +623,12 @@ local z_word_t crc_word_big(z_word_t dat
 #endif
 
 /* ========================================================================= */
-unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf,
-                              z_size_t len) {
+uLong ZEXPORT crc32_z(uLong crc, const unsigned char FAR *buf, z_size_t len) {
     /* Return initial CRC, if requested. */
     if (buf == Z_NULL) return 0;
 
 #ifdef DYNAMIC_CRC_TABLE
-    once(&made, make_crc_table);
+    z_once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
 
     /* Pre-condition the CRC */
@@ -1012,38 +943,41 @@ unsigned long ZEXPORT crc32_z(unsigned l
 #endif
 
 /* ========================================================================= */
-unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf,
-                            uInt len) {
+uLong ZEXPORT crc32(uLong crc, const unsigned char FAR *buf, uInt len) {
+    #ifdef HAVE_S390X_VX
+    return crc32_z_hook(crc, buf, len);
+    #endif
     return crc32_z(crc, buf, len);
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) {
+uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) {
+    if (len2 < 0)
+        return 0;
 #ifdef DYNAMIC_CRC_TABLE
-    once(&made, make_crc_table);
+    z_once(&made, make_crc_table);
 #endif /* DYNAMIC_CRC_TABLE */
-    return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff);
+    return x2nmodp(len2, 3);
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) {
-    return crc32_combine64(crc1, crc2, (z_off64_t)len2);
+uLong ZEXPORT crc32_combine_gen(z_off_t len2) {
+    return crc32_combine_gen64((z_off64_t)len2);
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) {
-#ifdef DYNAMIC_CRC_TABLE
-    once(&made, make_crc_table);
-#endif /* DYNAMIC_CRC_TABLE */
-    return x2nmodp(len2, 3);
+uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) {
+    if (op == 0)
+        return 0;
+    return multmodp(op, crc1 & 0xffffffff) ^ (crc2 & 0xffffffff);
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine_gen(z_off_t len2) {
-    return crc32_combine_gen64((z_off64_t)len2);
+uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) {
+    return crc32_combine_op(crc1, crc2, crc32_combine_gen64(len2));
 }
 
 /* ========================================================================= */
-uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) {
-    return multmodp(op, crc1) ^ (crc2 & 0xffffffff);
+uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) {
+    return crc32_combine64(crc1, crc2, (z_off64_t)len2);
 }
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c,v
diff -u -p -a -u -p -r1.12 deflate.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c	28 Jan 2025 01:06:11 -0000	1.12
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* deflate.c -- compress data using the deflation algorithm
- * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
+ * Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -37,7 +37,7 @@
  *  REFERENCES
  *
  *      Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
- *      Available in http://tools.ietf.org/html/rfc1951
+ *      Available at https://datatracker.ietf.org/doc/html/rfc1951
  *
  *      A description of the Rabin and Karp algorithm is given in the book
  *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
@@ -52,7 +52,7 @@
 #include "deflate.h"
 
 const char deflate_copyright[] =
-   " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler ";
+   " deflate 1.3.2 Copyright 1995-2026 Jean-loup Gailly and Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -170,8 +170,8 @@ local const config configuration_table[1
 #define CLEAR_HASH(s) \
     do { \
         s->head[s->hash_size - 1] = NIL; \
-        zmemzero((Bytef *)s->head, \
-                 (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \
+        zmemzero(s->head, (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \
+        s->slid = 0; \
     } while (0)
 
 /* ===========================================================================
@@ -195,8 +195,8 @@ local void slide_hash(deflate_state *s) 
         m = *--p;
         *p = (Pos)(m >= wsize ? m - wsize : NIL);
     } while (--n);
-    n = wsize;
 #ifndef FASTEST
+    n = wsize;
     p = &s->prev[n];
     do {
         m = *--p;
@@ -206,6 +206,7 @@ local void slide_hash(deflate_state *s) 
          */
     } while (--n);
 #endif
+    s->slid = 1;
 }
 
 /* ===========================================================================
@@ -259,7 +260,14 @@ local void fill_window(deflate_state *s)
         more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
 
         /* Deal with !@#$% 64K limit: */
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable: 4127)
+#endif
         if (sizeof(int) <= 2) {
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
             if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
                 more = wsize;
 
@@ -431,6 +439,7 @@ int ZEXPORT deflateInit2_(z_streamp strm
     if (windowBits == 8) windowBits = 9;  /* until 256-byte window bug fixed */
     s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
     if (s == Z_NULL) return Z_MEM_ERROR;
+    zmemzero(s, sizeof(deflate_state));
     strm->state = (struct internal_state FAR *)s;
     s->strm = strm;
     s->status = INIT_STATE;     /* to pass state test in deflateReset() */
@@ -712,10 +721,23 @@ int ZEXPORT deflateSetHeader(z_streamp s
 /* ========================================================================= */
 int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) {
     if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
-    if (pending != Z_NULL)
-        *pending = strm->state->pending;
     if (bits != Z_NULL)
         *bits = strm->state->bi_valid;
+    if (pending != Z_NULL) {
+        *pending = (unsigned)strm->state->pending;
+        if (*pending != strm->state->pending) {
+            *pending = (unsigned)-1;
+            return Z_BUF_ERROR;
+        }
+    }
+    return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateUsed(z_streamp strm, int *bits) {
+    if (deflateStateCheck(strm)) return Z_STREAM_ERROR;
+    if (bits != Z_NULL)
+        *bits = strm->state->bi_used;
     return Z_OK;
 }
 
@@ -831,28 +853,34 @@ int ZEXPORT deflateTune(z_streamp strm, 
  *
  * Shifts are used to approximate divisions, for speed.
  */
-uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) {
+z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen) {
     deflate_state *s;
-    uLong fixedlen, storelen, wraplen;
+    z_size_t fixedlen, storelen, wraplen, bound;
 
     /* upper bound for fixed blocks with 9-bit literals and length 255
        (memLevel == 2, which is the lowest that may not use stored blocks) --
        ~13% overhead plus a small constant */
     fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) +
                (sourceLen >> 9) + 4;
+    if (fixedlen < sourceLen)
+        fixedlen = (z_size_t)-1;
 
     /* upper bound for stored blocks with length 127 (memLevel == 1) --
        ~4% overhead plus a small constant */
     storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) +
                (sourceLen >> 11) + 7;
+    if (storelen < sourceLen)
+        storelen = (z_size_t)-1;
 
-    /* if can't get parameters, return larger bound plus a zlib wrapper */
-    if (deflateStateCheck(strm))
-        return (fixedlen > storelen ? fixedlen : storelen) + 6;
+    /* if can't get parameters, return larger bound plus a wrapper */
+    if (deflateStateCheck(strm)) {
+        bound = fixedlen > storelen ? fixedlen : storelen;
+        return bound + 18 < bound ? (z_size_t)-1 : bound + 18;
+    }
 
     /* compute wrapper length */
     s = strm->state;
-    switch (s->wrap) {
+    switch (s->wrap < 0 ? -s->wrap : s->wrap) {
     case 0:                                 /* raw deflate */
         wraplen = 0;
         break;
@@ -882,18 +910,25 @@ uLong ZEXPORT deflateBound(z_streamp str
         break;
 #endif
     default:                                /* for compiler happiness */
-        wraplen = 6;
+        wraplen = 18;
     }
 
     /* if not default parameters, return one of the conservative bounds */
-    if (s->w_bits != 15 || s->hash_bits != 8 + 7)
-        return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) +
-               wraplen;
+    if (s->w_bits != 15 || s->hash_bits != 8 + 7) {
+        bound = s->w_bits <= s->hash_bits && s->level ? fixedlen :
+                                                        storelen;
+        return bound + wraplen < bound ? (z_size_t)-1 : bound + wraplen;
+    }
 
     /* default settings: return tight bound for that case -- ~0.03% overhead
        plus a small constant */
-    return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
-           (sourceLen >> 25) + 13 - 6 + wraplen;
+    bound = sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+            (sourceLen >> 25) + 13 - 6 + wraplen;
+    return bound < sourceLen ? (z_size_t)-1 : bound;
+}
+uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) {
+    z_size_t bound = deflateBound_z(strm, sourceLen);
+    return (uLong)bound != bound ? (uLong)-1 : (uLong)bound;
 }
 
 /* =========================================================================
@@ -917,8 +952,8 @@ local void flush_pending(z_streamp strm)
     deflate_state *s = strm->state;
 
     _tr_flush_bits(s);
-    len = s->pending;
-    if (len > strm->avail_out) len = strm->avail_out;
+    len = s->pending > strm->avail_out ? strm->avail_out :
+                                         (unsigned)s->pending;
     if (len == 0) return;
 
     zmemcpy(strm->next_out, s->pending_out, len);
@@ -938,8 +973,8 @@ local void flush_pending(z_streamp strm)
 #define HCRC_UPDATE(beg) \
     do { \
         if (s->gzhead->hcrc && s->pending > (beg)) \
-            strm->adler = crc32(strm->adler, s->pending_buf + (beg), \
-                                s->pending - (beg)); \
+            strm->adler = crc32_z(strm->adler, s->pending_buf + (beg), \
+                                  s->pending - (beg)); \
     } while (0)
 
 /* ========================================================================= */
@@ -1073,8 +1108,8 @@ int ZEXPORT deflate(z_streamp strm, int 
                 put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
             }
             if (s->gzhead->hcrc)
-                strm->adler = crc32(strm->adler, s->pending_buf,
-                                    s->pending);
+                strm->adler = crc32_z(strm->adler, s->pending_buf,
+                                      s->pending);
             s->gzindex = 0;
             s->status = EXTRA_STATE;
         }
@@ -1082,9 +1117,9 @@ int ZEXPORT deflate(z_streamp strm, int 
     if (s->status == EXTRA_STATE) {
         if (s->gzhead->extra != Z_NULL) {
             ulg beg = s->pending;   /* start of bytes to update crc */
-            uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
+            ulg left = (s->gzhead->extra_len & 0xffff) - s->gzindex;
             while (s->pending + left > s->pending_buf_size) {
-                uInt copy = s->pending_buf_size - s->pending;
+                ulg copy = s->pending_buf_size - s->pending;
                 zmemcpy(s->pending_buf + s->pending,
                         s->gzhead->extra + s->gzindex, copy);
                 s->pending = s->pending_buf_size;
@@ -1295,12 +1330,13 @@ int ZEXPORT deflateCopy(z_streamp dest, 
 
     ss = source->state;
 
-    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+    zmemcpy(dest, source, sizeof(z_stream));
 
     ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
     if (ds == Z_NULL) return Z_MEM_ERROR;
+    zmemzero(ds, sizeof(deflate_state));
     dest->state = (struct internal_state FAR *) ds;
-    zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+    zmemcpy(ds, ss, sizeof(deflate_state));
     ds->strm = dest;
 
     ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
@@ -1313,18 +1349,23 @@ int ZEXPORT deflateCopy(z_streamp dest, 
         deflateEnd (dest);
         return Z_MEM_ERROR;
     }
-    /* following zmemcpy do not work for 16-bit MSDOS */
-    zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
-    zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
-    zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
-    zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS);
+    /* following zmemcpy's do not work for 16-bit MSDOS */
+    zmemcpy(ds->window, ss->window, ss->high_water);
+    zmemcpy(ds->prev, ss->prev,
+            (ss->slid || ss->strstart - ss->insert > ds->w_size ? ds->w_size :
+                ss->strstart - ss->insert) * sizeof(Pos));
+    zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos));
 
     ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+    zmemcpy(ds->pending_out, ss->pending_out, ss->pending);
 #ifdef LIT_MEM
     ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1));
     ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2);
+    zmemcpy(ds->d_buf, ss->d_buf, ss->sym_next * sizeof(ush));
+    zmemcpy(ds->l_buf, ss->l_buf, ss->sym_next);
 #else
     ds->sym_buf = ds->pending_buf + ds->lit_bufsize;
+    zmemcpy(ds->sym_buf, ss->sym_buf, ss->sym_next);
 #endif
 
     ds->l_desc.dyn_tree = ds->dyn_ltree;
@@ -1347,9 +1388,9 @@ int ZEXPORT deflateCopy(z_streamp dest, 
  */
 local uInt longest_match(deflate_state *s, IPos cur_match) {
     unsigned chain_length = s->max_chain_length;/* max hash chain length */
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                      /* matched string */
-    register int len;                           /* length of current match */
+    Bytef *scan = s->window + s->strstart;      /* current string */
+    Bytef *match;                               /* matched string */
+    int len;                                    /* length of current match */
     int best_len = (int)s->prev_length;         /* best match length so far */
     int nice_match = s->nice_match;             /* stop if match long enough */
     IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
@@ -1364,13 +1405,13 @@ local uInt longest_match(deflate_state *
     /* Compare two bytes at a time. Note: this is not always beneficial.
      * Try with and without -DUNALIGNED_OK to check.
      */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
-    register ush scan_start = *(ushf*)scan;
-    register ush scan_end   = *(ushf*)(scan + best_len - 1);
+    Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+    ush scan_start = *(ushf*)scan;
+    ush scan_end   = *(ushf*)(scan + best_len - 1);
 #else
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
-    register Byte scan_end1  = scan[best_len - 1];
-    register Byte scan_end   = scan[best_len];
+    Bytef *strend = s->window + s->strstart + MAX_MATCH;
+    Byte scan_end1  = scan[best_len - 1];
+    Byte scan_end   = scan[best_len];
 #endif
 
     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
@@ -1494,10 +1535,10 @@ local uInt longest_match(deflate_state *
  * Optimized version for FASTEST only
  */
 local uInt longest_match(deflate_state *s, IPos cur_match) {
-    register Bytef *scan = s->window + s->strstart; /* current string */
-    register Bytef *match;                       /* matched string */
-    register int len;                           /* length of current match */
-    register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+    Bytef *scan = s->window + s->strstart;      /* current string */
+    Bytef *match;                               /* matched string */
+    int len;                                    /* length of current match */
+    Bytef *strend = s->window + s->strstart + MAX_MATCH;
 
     /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
      * It is easy to get rid of this optimization if necessary.
@@ -1557,7 +1598,7 @@ local uInt longest_match(deflate_state *
 local void check_match(deflate_state *s, IPos start, IPos match, int length) {
     /* check that the match is indeed a match */
     Bytef *back = s->window + (int)match, *here = s->window + start;
-    IPos len = length;
+    IPos len = (IPos)length;
     if (match == (IPos)-1) {
         /* match starts one byte before the current window -- just compare the
            subsequent length-1 bytes */
@@ -1629,13 +1670,14 @@ local block_state deflate_stored(deflate
      * this is 32K. This can be as small as 507 bytes for memLevel == 1. For
      * large input and output buffers, the stored block size will be larger.
      */
-    unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size);
+    unsigned min_block = (unsigned)(MIN(s->pending_buf_size - 5, s->w_size));
 
     /* Copy as many min_block or larger stored blocks directly to next_out as
      * possible. If flushing, copy the remaining available input to next_out as
      * stored blocks, if there is enough space.
      */
-    unsigned len, left, have, last = 0;
+    int last = 0;
+    unsigned len, left, have;
     unsigned used = s->strm->avail_in;
     do {
         /* Set len to the maximum size block that we can copy directly with the
@@ -1643,12 +1685,12 @@ local block_state deflate_stored(deflate
          * would be copied from what's left in the window.
          */
         len = MAX_STORED;       /* maximum deflate stored block length */
-        have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
+        have = ((unsigned)s->bi_valid + 42) >> 3;   /* bytes in header */
         if (s->strm->avail_out < have)          /* need room for header */
             break;
             /* maximum stored block length that will fit in avail_out: */
         have = s->strm->avail_out - have;
-        left = s->strstart - s->block_start;    /* bytes left in window */
+        left = (unsigned)(s->strstart - s->block_start);    /* window bytes */
         if (len > (ulg)left + s->strm->avail_in)
             len = left + s->strm->avail_in;     /* limit len to the input */
         if (len > have)
@@ -1671,10 +1713,10 @@ local block_state deflate_stored(deflate
         _tr_stored_block(s, (char *)0, 0L, last);
 
         /* Replace the lengths in the dummy stored block with len. */
-        s->pending_buf[s->pending - 4] = len;
-        s->pending_buf[s->pending - 3] = len >> 8;
-        s->pending_buf[s->pending - 2] = ~len;
-        s->pending_buf[s->pending - 1] = ~len >> 8;
+        s->pending_buf[s->pending - 4] = (Bytef)len;
+        s->pending_buf[s->pending - 3] = (Bytef)(len >> 8);
+        s->pending_buf[s->pending - 2] = (Bytef)~len;
+        s->pending_buf[s->pending - 1] = (Bytef)(~len >> 8);
 
         /* Write the stored block header bytes. */
         flush_pending(s->strm);
@@ -1745,8 +1787,10 @@ local block_state deflate_stored(deflate
         s->high_water = s->strstart;
 
     /* If the last block was written to next_out, then done. */
-    if (last)
+    if (last) {
+        s->bi_used = 8;
         return finish_done;
+    }
 
     /* If flushing and all input has been consumed, then done. */
     if (flush != Z_NO_FLUSH && flush != Z_FINISH &&
@@ -1754,7 +1798,7 @@ local block_state deflate_stored(deflate
         return block_done;
 
     /* Fill the window with any remaining input. */
-    have = s->window_size - s->strstart;
+    have = (unsigned)(s->window_size - s->strstart);
     if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) {
         /* Slide the window down. */
         s->block_start -= s->w_size;
@@ -1781,11 +1825,11 @@ local block_state deflate_stored(deflate
      * have enough input for a worthy block, or if flushing and there is enough
      * room for the remaining input as a stored block in the pending buffer.
      */
-    have = (s->bi_valid + 42) >> 3;         /* number of header bytes */
+    have = ((unsigned)s->bi_valid + 42) >> 3;   /* bytes in header */
         /* maximum stored block length that will fit in pending: */
-    have = MIN(s->pending_buf_size - have, MAX_STORED);
+    have = (unsigned)MIN(s->pending_buf_size - have, MAX_STORED);
     min_block = MIN(have, s->w_size);
-    left = s->strstart - s->block_start;
+    left = (unsigned)(s->strstart - s->block_start);
     if (left >= min_block ||
         ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH &&
          s->strm->avail_in == 0 && left <= have)) {
@@ -1798,6 +1842,8 @@ local block_state deflate_stored(deflate
     }
 
     /* We've done all we can with the available input and output. */
+    if (last)
+        s->bi_used = 8;
     return last ? finish_started : need_more;
 }
 
@@ -1846,7 +1892,7 @@ local block_state deflate_fast(deflate_s
             /* longest_match() sets match_start */
         }
         if (s->match_length >= MIN_MATCH) {
-            check_match(s, s->strstart, s->match_start, s->match_length);
+            check_match(s, s->strstart, s->match_start, (int)s->match_length);
 
             _tr_tally_dist(s, s->strstart - s->match_start,
                            s->match_length - MIN_MATCH, bflush);
@@ -1968,7 +2014,7 @@ local block_state deflate_slow(deflate_s
             uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
             /* Do not insert strings in hash table beyond this. */
 
-            check_match(s, s->strstart - 1, s->prev_match, s->prev_length);
+            check_match(s, s->strstart - 1, s->prev_match, (int)s->prev_length);
 
             _tr_tally_dist(s, s->strstart - 1 - s->prev_match,
                            s->prev_length - MIN_MATCH, bflush);
@@ -2076,7 +2122,7 @@ local block_state deflate_rle(deflate_st
 
         /* Emit match if have run of MIN_MATCH or longer, else emit literal */
         if (s->match_length >= MIN_MATCH) {
-            check_match(s, s->strstart, s->strstart - 1, s->match_length);
+            check_match(s, s->strstart, s->strstart - 1, (int)s->match_length);
 
             _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
 
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h,v
diff -u -p -a -u -p -r1.11 deflate.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h	28 Jan 2025 01:06:11 -0000	1.11
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* deflate.h -- internal compression state
- * Copyright (C) 1995-2024 Jean-loup Gailly
+ * Copyright (C) 1995-2026 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -271,6 +271,9 @@ typedef struct internal_state {
     /* Number of valid bits in bi_buf.  All bits above the last valid bit
      * are always zero.
      */
+    int bi_used;
+    /* Last number of used bits when going to a byte boundary.
+     */
 
     ulg high_water;
     /* High water mark offset in window for initialized bytes -- bytes above
@@ -278,6 +281,9 @@ typedef struct internal_state {
      * longest match routines access bytes past the input.  This is then
      * updated to the new high water mark.
      */
+
+    int slid;
+    /* True if the hash table has been slid since it was cleared. */
 
 } FAR deflate_state;
 
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c,v
diff -u -p -a -u -p -r1.1.1.8 infback.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c	28 Jan 2025 01:04:23 -0000	1.1.1.8
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/infback.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* infback.c -- inflate using a call-back interface
- * Copyright (C) 1995-2022 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -46,7 +46,7 @@ int ZEXPORT inflateBackInit_(z_streamp s
 #ifdef Z_SOLO
         return Z_STREAM_ERROR;
 #else
-    strm->zfree = zcfree;
+        strm->zfree = zcfree;
 #endif
     state = (struct inflate_state FAR *)ZALLOC(strm, 1,
                                                sizeof(struct inflate_state));
@@ -63,57 +63,6 @@ int ZEXPORT inflateBackInit_(z_streamp s
     return Z_OK;
 }
 
-/*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables(struct inflate_state FAR *state) {
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
 /* Macros for inflateBack(): */
 
 /* Load returned state from inflate_fast() */
@@ -293,7 +242,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
                 state->mode = STORED;
                 break;
             case 1:                             /* fixed block */
-                fixedtables(state);
+                inflate_fixed(state);
                 Tracev((stderr, "inflate:     fixed codes block%s\n",
                         state->last ? " (last)" : ""));
                 state->mode = LEN;              /* decode codes */
@@ -303,8 +252,8 @@ int ZEXPORT inflateBack(z_streamp strm, 
                         state->last ? " (last)" : ""));
                 state->mode = TABLE;
                 break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
+            default:
+                strm->msg = (z_const char *)"invalid block type";
                 state->mode = BAD;
             }
             DROPBITS(2);
@@ -315,7 +264,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             BYTEBITS();                         /* go to byte boundary */
             NEEDBITS(32);
             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
+                strm->msg = (z_const char *)"invalid stored block lengths";
                 state->mode = BAD;
                 break;
             }
@@ -353,7 +302,8 @@ int ZEXPORT inflateBack(z_streamp strm, 
             DROPBITS(4);
 #ifndef PKZIP_BUG_WORKAROUND
             if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
+                strm->msg = (z_const char *)
+                    "too many length or distance symbols";
                 state->mode = BAD;
                 break;
             }
@@ -375,7 +325,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             ret = inflate_table(CODES, state->lens, 19, &(state->next),
                                 &(state->lenbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
+                strm->msg = (z_const char *)"invalid code lengths set";
                 state->mode = BAD;
                 break;
             }
@@ -398,7 +348,8 @@ int ZEXPORT inflateBack(z_streamp strm, 
                         NEEDBITS(here.bits + 2);
                         DROPBITS(here.bits);
                         if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
+                            strm->msg = (z_const char *)
+                                "invalid bit length repeat";
                             state->mode = BAD;
                             break;
                         }
@@ -421,7 +372,8 @@ int ZEXPORT inflateBack(z_streamp strm, 
                         DROPBITS(7);
                     }
                     if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
+                        strm->msg = (z_const char *)
+                            "invalid bit length repeat";
                         state->mode = BAD;
                         break;
                     }
@@ -435,7 +387,8 @@ int ZEXPORT inflateBack(z_streamp strm, 
 
             /* check for end-of-block code (better have one) */
             if (state->lens[256] == 0) {
-                strm->msg = (char *)"invalid code -- missing end-of-block";
+                strm->msg = (z_const char *)
+                    "invalid code -- missing end-of-block";
                 state->mode = BAD;
                 break;
             }
@@ -449,7 +402,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
                                 &(state->lenbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
+                strm->msg = (z_const char *)"invalid literal/lengths set";
                 state->mode = BAD;
                 break;
             }
@@ -458,7 +411,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
                             &(state->next), &(state->distbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid distances set";
+                strm->msg = (z_const char *)"invalid distances set";
                 state->mode = BAD;
                 break;
             }
@@ -517,7 +470,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
 
             /* invalid code */
             if (here.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
+                strm->msg = (z_const char *)"invalid literal/length code";
                 state->mode = BAD;
                 break;
             }
@@ -549,7 +502,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             }
             DROPBITS(here.bits);
             if (here.op & 64) {
-                strm->msg = (char *)"invalid distance code";
+                strm->msg = (z_const char *)"invalid distance code";
                 state->mode = BAD;
                 break;
             }
@@ -564,7 +517,7 @@ int ZEXPORT inflateBack(z_streamp strm, 
             }
             if (state->offset > state->wsize - (state->whave < state->wsize ?
                                                 left : 0)) {
-                strm->msg = (char *)"invalid distance too far back";
+                strm->msg = (z_const char *)"invalid distance too far back";
                 state->mode = BAD;
                 break;
             }
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c,v
diff -u -p -a -u -p -r1.1.1.6 inffast.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c	28 Jan 2025 01:04:23 -0000	1.1.1.6
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffast.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* inffast.c -- fast decoding
- * Copyright (C) 1995-2017 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -155,7 +155,8 @@ void ZLIB_INTERNAL inflate_fast(z_stream
                 dist += (unsigned)hold & ((1U << op) - 1);
 #ifdef INFLATE_STRICT
                 if (dist > dmax) {
-                    strm->msg = (char *)"invalid distance too far back";
+                    strm->msg = (z_const char *)
+                        "invalid distance too far back";
                     state->mode = BAD;
                     break;
                 }
@@ -168,8 +169,8 @@ void ZLIB_INTERNAL inflate_fast(z_stream
                     op = dist - op;             /* distance back in window */
                     if (op > whave) {
                         if (state->sane) {
-                            strm->msg =
-                                (char *)"invalid distance too far back";
+                            strm->msg = (z_const char *)
+                                "invalid distance too far back";
                             state->mode = BAD;
                             break;
                         }
@@ -265,7 +266,7 @@ void ZLIB_INTERNAL inflate_fast(z_stream
                 goto dodist;
             }
             else {
-                strm->msg = (char *)"invalid distance code";
+                strm->msg = (z_const char *)"invalid distance code";
                 state->mode = BAD;
                 break;
             }
@@ -280,7 +281,7 @@ void ZLIB_INTERNAL inflate_fast(z_stream
             break;
         }
         else {
-            strm->msg = (char *)"invalid literal/length code";
+            strm->msg = (z_const char *)"invalid literal/length code";
             state->mode = BAD;
             break;
         }
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h,v
diff -u -p -a -u -p -r1.1.1.2 inffixed.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h	24 Mar 2014 14:58:49 -0000	1.1.1.2
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inffixed.h	29 Mar 2026 16:31:42 -0000
@@ -1,94 +1,94 @@
-    /* inffixed.h -- table for decoding fixed codes
-     * Generated automatically by makefixed().
-     */
+/* inffixed.h -- table for decoding fixed codes
+ * Generated automatically by makefixed().
+ */
 
-    /* WARNING: this file should *not* be used by applications.
-       It is part of the implementation of this library and is
-       subject to change. Applications should only use zlib.h.
-     */
+/* WARNING: this file should *not* be used by applications.
+   It is part of the implementation of this library and is
+   subject to change. Applications should only use zlib.h.
+ */
 
-    static const code lenfix[512] = {
-        {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
-        {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
-        {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
-        {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
-        {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
-        {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
-        {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
-        {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
-        {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
-        {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
-        {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
-        {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
-        {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
-        {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
-        {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
-        {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
-        {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
-        {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
-        {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
-        {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
-        {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
-        {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
-        {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
-        {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
-        {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
-        {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
-        {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
-        {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
-        {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
-        {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
-        {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
-        {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
-        {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
-        {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
-        {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
-        {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
-        {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
-        {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
-        {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
-        {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
-        {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
-        {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
-        {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
-        {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
-        {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
-        {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
-        {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
-        {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
-        {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
-        {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
-        {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
-        {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
-        {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
-        {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
-        {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
-        {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
-        {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
-        {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
-        {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
-        {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
-        {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
-        {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
-        {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
-        {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
-        {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
-        {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
-        {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
-        {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
-        {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
-        {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
-        {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
-        {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
-        {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
-        {0,9,255}
-    };
+static const code lenfix[512] = {
+    {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+    {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+    {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+    {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+    {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+    {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+    {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+    {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+    {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+    {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+    {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+    {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+    {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+    {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+    {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+    {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+    {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+    {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
+    {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
+    {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+    {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+    {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+    {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+    {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+    {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+    {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+    {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+    {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+    {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+    {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+    {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+    {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+    {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+    {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+    {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+    {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
+    {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
+    {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+    {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+    {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+    {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+    {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+    {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+    {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+    {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+    {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+    {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+    {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+    {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+    {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+    {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+    {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+    {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+    {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
+    {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
+    {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+    {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+    {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+    {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+    {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+    {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+    {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+    {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+    {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+    {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+    {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+    {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+    {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+    {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+    {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+    {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+    {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+    {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
+    {0,9,255}
+};
 
-    static const code distfix[32] = {
-        {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
-        {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
-        {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
-        {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
-        {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
-        {22,5,193},{64,5,0}
-    };
+static const code distfix[32] = {
+    {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+    {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+    {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+    {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+    {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+    {22,5,193},{64,5,0}
+};
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c,v
diff -u -p -a -u -p -r1.7 inflate.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c	28 Jan 2025 01:06:11 -0000	1.7
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* inflate.c -- zlib decompression
- * Copyright (C) 1995-2022 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -85,12 +85,6 @@
 #include "inflate.h"
 #include "inffast.h"
 
-#ifdef MAKEFIXED
-#  ifndef BUILDFIXED
-#    define BUILDFIXED
-#  endif
-#endif
-
 local int inflateStateCheck(z_streamp strm) {
     struct inflate_state FAR *state;
     if (strm == Z_NULL ||
@@ -110,6 +104,7 @@ int ZEXPORT inflateResetKeep(z_streamp s
     state = (struct inflate_state FAR *)strm->state;
     strm->total_in = strm->total_out = state->total = 0;
     strm->msg = Z_NULL;
+    strm->data_type = 0;
     if (state->wrap)        /* to support ill-conceived Java test suite */
         strm->adler = state->wrap & 1;
     state->mode = HEAD;
@@ -202,6 +197,7 @@ int ZEXPORT inflateInit2_(z_streamp strm
     state = (struct inflate_state FAR *)
             ZALLOC(strm, 1, sizeof(struct inflate_state));
     if (state == Z_NULL) return Z_MEM_ERROR;
+    zmemzero(state, sizeof(struct inflate_state));
     Tracev((stderr, "inflate: allocated\n"));
     strm->state = (struct internal_state FAR *)state;
     state->strm = strm;
@@ -234,124 +230,12 @@ int ZEXPORT inflatePrime(z_streamp strm,
     }
     if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
     value &= (1L << bits) - 1;
-    state->hold += (unsigned)value << state->bits;
+    state->hold += (unsigned long)value << state->bits;
     state->bits += (uInt)bits;
     return Z_OK;
 }
 
 /*
-   Return state with length and distance decoding tables and index sizes set to
-   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
-   If BUILDFIXED is defined, then instead this routine builds the tables the
-   first time it's called, and returns those tables the first time and
-   thereafter.  This reduces the size of the code by about 2K bytes, in
-   exchange for a little execution time.  However, BUILDFIXED should not be
-   used for threaded applications, since the rewriting of the tables and virgin
-   may not be thread-safe.
- */
-local void fixedtables(struct inflate_state FAR *state) {
-#ifdef BUILDFIXED
-    static int virgin = 1;
-    static code *lenfix, *distfix;
-    static code fixed[544];
-
-    /* build fixed huffman tables if first call (may not be thread safe) */
-    if (virgin) {
-        unsigned sym, bits;
-        static code *next;
-
-        /* literal/length table */
-        sym = 0;
-        while (sym < 144) state->lens[sym++] = 8;
-        while (sym < 256) state->lens[sym++] = 9;
-        while (sym < 280) state->lens[sym++] = 7;
-        while (sym < 288) state->lens[sym++] = 8;
-        next = fixed;
-        lenfix = next;
-        bits = 9;
-        inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
-
-        /* distance table */
-        sym = 0;
-        while (sym < 32) state->lens[sym++] = 5;
-        distfix = next;
-        bits = 5;
-        inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
-
-        /* do this just once */
-        virgin = 0;
-    }
-#else /* !BUILDFIXED */
-#   include "inffixed.h"
-#endif /* BUILDFIXED */
-    state->lencode = lenfix;
-    state->lenbits = 9;
-    state->distcode = distfix;
-    state->distbits = 5;
-}
-
-#ifdef MAKEFIXED
-#include <stdio.h>
-
-/*
-   Write out the inffixed.h that is #include'd above.  Defining MAKEFIXED also
-   defines BUILDFIXED, so the tables are built on the fly.  makefixed() writes
-   those tables to stdout, which would be piped to inffixed.h.  A small program
-   can simply call makefixed to do this:
-
-    void makefixed(void);
-
-    int main(void)
-    {
-        makefixed();
-        return 0;
-    }
-
-   Then that can be linked with zlib built with MAKEFIXED defined and run:
-
-    a.out > inffixed.h
- */
-void makefixed(void)
-{
-    unsigned low, size;
-    struct inflate_state state;
-
-    fixedtables(&state);
-    puts("    /* inffixed.h -- table for decoding fixed codes");
-    puts("     * Generated automatically by makefixed().");
-    puts("     */");
-    puts("");
-    puts("    /* WARNING: this file should *not* be used by applications.");
-    puts("       It is part of the implementation of this library and is");
-    puts("       subject to change. Applications should only use zlib.h.");
-    puts("     */");
-    puts("");
-    size = 1U << 9;
-    printf("    static const code lenfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 7) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
-               state.lencode[low].bits, state.lencode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-    size = 1U << 5;
-    printf("\n    static const code distfix[%u] = {", size);
-    low = 0;
-    for (;;) {
-        if ((low % 6) == 0) printf("\n        ");
-        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
-               state.distcode[low].val);
-        if (++low == size) break;
-        putchar(',');
-    }
-    puts("\n    };");
-}
-#endif /* MAKEFIXED */
-
-/*
    Update the window with the last wsize (normally 32K) bytes written before
    returning.  If window does not exist yet, create it.  This is only called
    when a window is already in use, or when output has been written during this
@@ -642,12 +526,12 @@ int ZEXPORT inflate(z_streamp strm, int 
             if (
 #endif
                 ((BITS(8) << 8) + (hold >> 8)) % 31) {
-                strm->msg = (char *)"incorrect header check";
+                strm->msg = (z_const char *)"incorrect header check";
                 state->mode = BAD;
                 break;
             }
             if (BITS(4) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
+                strm->msg = (z_const char *)"unknown compression method";
                 state->mode = BAD;
                 break;
             }
@@ -656,7 +540,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             if (state->wbits == 0)
                 state->wbits = len;
             if (len > 15 || len > state->wbits) {
-                strm->msg = (char *)"invalid window size";
+                strm->msg = (z_const char *)"invalid window size";
                 state->mode = BAD;
                 break;
             }
@@ -672,12 +556,12 @@ int ZEXPORT inflate(z_streamp strm, int 
             NEEDBITS(16);
             state->flags = (int)(hold);
             if ((state->flags & 0xff) != Z_DEFLATED) {
-                strm->msg = (char *)"unknown compression method";
+                strm->msg = (z_const char *)"unknown compression method";
                 state->mode = BAD;
                 break;
             }
             if (state->flags & 0xe000) {
-                strm->msg = (char *)"unknown header flags set";
+                strm->msg = (z_const char *)"unknown header flags set";
                 state->mode = BAD;
                 break;
             }
@@ -793,7 +677,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             if (state->flags & 0x0200) {
                 NEEDBITS(16);
                 if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
-                    strm->msg = (char *)"header crc mismatch";
+                    strm->msg = (z_const char *)"header crc mismatch";
                     state->mode = BAD;
                     break;
                 }
@@ -840,7 +724,7 @@ int ZEXPORT inflate(z_streamp strm, int 
                 state->mode = STORED;
                 break;
             case 1:                             /* fixed block */
-                fixedtables(state);
+                inflate_fixed(state);
                 Tracev((stderr, "inflate:     fixed codes block%s\n",
                         state->last ? " (last)" : ""));
                 state->mode = LEN_;             /* decode codes */
@@ -854,8 +738,8 @@ int ZEXPORT inflate(z_streamp strm, int 
                         state->last ? " (last)" : ""));
                 state->mode = TABLE;
                 break;
-            case 3:
-                strm->msg = (char *)"invalid block type";
+            default:
+                strm->msg = (z_const char *)"invalid block type";
                 state->mode = BAD;
             }
             DROPBITS(2);
@@ -864,7 +748,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             BYTEBITS();                         /* go to byte boundary */
             NEEDBITS(32);
             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
-                strm->msg = (char *)"invalid stored block lengths";
+                strm->msg = (z_const char *)"invalid stored block lengths";
                 state->mode = BAD;
                 break;
             }
@@ -905,7 +789,8 @@ int ZEXPORT inflate(z_streamp strm, int 
             DROPBITS(4);
 #ifndef PKZIP_BUG_WORKAROUND
             if (state->nlen > 286 || state->ndist > 30) {
-                strm->msg = (char *)"too many length or distance symbols";
+                strm->msg = (z_const char *)
+                    "too many length or distance symbols";
                 state->mode = BAD;
                 break;
             }
@@ -923,12 +808,12 @@ int ZEXPORT inflate(z_streamp strm, int 
             while (state->have < 19)
                 state->lens[order[state->have++]] = 0;
             state->next = state->codes;
-            state->lencode = (const code FAR *)(state->next);
+            state->lencode = state->distcode = (const code FAR *)(state->next);
             state->lenbits = 7;
             ret = inflate_table(CODES, state->lens, 19, &(state->next),
                                 &(state->lenbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid code lengths set";
+                strm->msg = (z_const char *)"invalid code lengths set";
                 state->mode = BAD;
                 break;
             }
@@ -952,7 +837,8 @@ int ZEXPORT inflate(z_streamp strm, int 
                         NEEDBITS(here.bits + 2);
                         DROPBITS(here.bits);
                         if (state->have == 0) {
-                            strm->msg = (char *)"invalid bit length repeat";
+                            strm->msg = (z_const char *)
+                                "invalid bit length repeat";
                             state->mode = BAD;
                             break;
                         }
@@ -975,7 +861,8 @@ int ZEXPORT inflate(z_streamp strm, int 
                         DROPBITS(7);
                     }
                     if (state->have + copy > state->nlen + state->ndist) {
-                        strm->msg = (char *)"invalid bit length repeat";
+                        strm->msg = (z_const char *)
+                            "invalid bit length repeat";
                         state->mode = BAD;
                         break;
                     }
@@ -989,7 +876,8 @@ int ZEXPORT inflate(z_streamp strm, int 
 
             /* check for end-of-block code (better have one) */
             if (state->lens[256] == 0) {
-                strm->msg = (char *)"invalid code -- missing end-of-block";
+                strm->msg = (z_const char *)
+                    "invalid code -- missing end-of-block";
                 state->mode = BAD;
                 break;
             }
@@ -1003,7 +891,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
                                 &(state->lenbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid literal/lengths set";
+                strm->msg = (z_const char *)"invalid literal/lengths set";
                 state->mode = BAD;
                 break;
             }
@@ -1012,7 +900,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
                             &(state->next), &(state->distbits), state->work);
             if (ret) {
-                strm->msg = (char *)"invalid distances set";
+                strm->msg = (z_const char *)"invalid distances set";
                 state->mode = BAD;
                 break;
             }
@@ -1066,7 +954,7 @@ int ZEXPORT inflate(z_streamp strm, int 
                 break;
             }
             if (here.op & 64) {
-                strm->msg = (char *)"invalid literal/length code";
+                strm->msg = (z_const char *)"invalid literal/length code";
                 state->mode = BAD;
                 break;
             }
@@ -1104,7 +992,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             DROPBITS(here.bits);
             state->back += here.bits;
             if (here.op & 64) {
-                strm->msg = (char *)"invalid distance code";
+                strm->msg = (z_const char *)"invalid distance code";
                 state->mode = BAD;
                 break;
             }
@@ -1121,7 +1009,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             }
 #ifdef INFLATE_STRICT
             if (state->offset > state->dmax) {
-                strm->msg = (char *)"invalid distance too far back";
+                strm->msg = (z_const char *)"invalid distance too far back";
                 state->mode = BAD;
                 break;
             }
@@ -1136,7 +1024,8 @@ int ZEXPORT inflate(z_streamp strm, int 
                 copy = state->offset - copy;
                 if (copy > state->whave) {
                     if (state->sane) {
-                        strm->msg = (char *)"invalid distance too far back";
+                        strm->msg = (z_const char *)
+                            "invalid distance too far back";
                         state->mode = BAD;
                         break;
                     }
@@ -1195,7 +1084,7 @@ int ZEXPORT inflate(z_streamp strm, int 
                      state->flags ? hold :
 #endif
                      ZSWAP32(hold)) != state->check) {
-                    strm->msg = (char *)"incorrect data check";
+                    strm->msg = (z_const char *)"incorrect data check";
                     state->mode = BAD;
                     break;
                 }
@@ -1209,7 +1098,7 @@ int ZEXPORT inflate(z_streamp strm, int 
             if (state->wrap && state->flags) {
                 NEEDBITS(32);
                 if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
-                    strm->msg = (char *)"incorrect length check";
+                    strm->msg = (z_const char *)"incorrect length check";
                     state->mode = BAD;
                     break;
                 }
@@ -1440,7 +1329,6 @@ int ZEXPORT inflateCopy(z_streamp dest, 
     struct inflate_state FAR *state;
     struct inflate_state FAR *copy;
     unsigned char FAR *window;
-    unsigned wsize;
 
     /* check input */
     if (inflateStateCheck(source) || dest == Z_NULL)
@@ -1451,6 +1339,7 @@ int ZEXPORT inflateCopy(z_streamp dest, 
     copy = (struct inflate_state FAR *)
            ZALLOC(source, 1, sizeof(struct inflate_state));
     if (copy == Z_NULL) return Z_MEM_ERROR;
+    zmemzero(copy, sizeof(struct inflate_state));
     window = Z_NULL;
     if (state->window != Z_NULL) {
         window = (unsigned char FAR *)
@@ -1462,8 +1351,8 @@ int ZEXPORT inflateCopy(z_streamp dest, 
     }
 
     /* copy state */
-    zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
-    zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+    zmemcpy(dest, source, sizeof(z_stream));
+    zmemcpy(copy, state, sizeof(struct inflate_state));
     copy->strm = dest;
     if (state->lencode >= state->codes &&
         state->lencode <= state->codes + ENOUGH - 1) {
@@ -1471,10 +1360,8 @@ int ZEXPORT inflateCopy(z_streamp dest, 
         copy->distcode = copy->codes + (state->distcode - state->codes);
     }
     copy->next = copy->codes + (state->next - state->codes);
-    if (window != Z_NULL) {
-        wsize = 1U << state->wbits;
-        zmemcpy(window, state->window, wsize);
-    }
+    if (window != Z_NULL)
+        zmemcpy(window, state->window, state->whave);
     copy->window = window;
     dest->state = (struct internal_state FAR *)copy;
     return Z_OK;
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h,v
diff -u -p -a -u -p -r1.1.1.4 inflate.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h	15 Feb 2023 01:32:40 -0000	1.1.1.4
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.h	29 Mar 2026 16:31:42 -0000
@@ -100,7 +100,7 @@ struct inflate_state {
     unsigned char FAR *window;  /* allocated sliding window, if needed */
         /* bit accumulator */
     unsigned long hold;         /* input bit accumulator */
-    unsigned bits;              /* number of bits in "in" */
+    unsigned bits;              /* number of bits in hold */
         /* for string and stored block copying */
     unsigned length;            /* literal or length of data to copy */
     unsigned offset;            /* distance back to copy string from */
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c,v
diff -u -p -a -u -p -r1.1.1.8 inftrees.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c	28 Jan 2025 01:04:23 -0000	1.1.1.8
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.c	29 Mar 2026 16:31:42 -0000
@@ -1,15 +1,29 @@
 /* inftrees.c -- generate Huffman trees for efficient decoding
- * Copyright (C) 1995-2024 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
+#ifdef MAKEFIXED
+#  ifndef BUILDFIXED
+#    define BUILDFIXED
+#  endif
+#endif
+#ifdef BUILDFIXED
+#  define Z_ONCE
+#endif
+
 #include "zutil.h"
 #include "inftrees.h"
+#include "inflate.h"
+
+#ifndef NULL
+#  define NULL 0
+#endif
 
 #define MAXBITS 15
 
 const char inflate_copyright[] =
-   " inflate 1.3.1 Copyright 1995-2024 Mark Adler ";
+   " inflate 1.3.2 Copyright 1995-2026 Mark Adler ";
 /*
   If you use the zlib library in a product, an acknowledgment is welcome
   in the documentation of your product. If for some reason you cannot
@@ -47,9 +61,9 @@ int ZLIB_INTERNAL inflate_table(codetype
     unsigned mask;              /* mask for low root bits */
     code here;                  /* table entry for duplication */
     code FAR *next;             /* next available space in table */
-    const unsigned short FAR *base;     /* base value table to use */
-    const unsigned short FAR *extra;    /* extra bits table to use */
-    unsigned match;             /* use base and extra for symbol >= match */
+    const unsigned short FAR *base = NULL;  /* base value table to use */
+    const unsigned short FAR *extra = NULL; /* extra bits table to use */
+    unsigned match = 0;         /* use base and extra for symbol >= match */
     unsigned short count[MAXBITS+1];    /* number of codes of each length */
     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
@@ -57,7 +71,7 @@ int ZLIB_INTERNAL inflate_table(codetype
         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
-        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77};
+        19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 199, 75};
     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
@@ -175,7 +189,6 @@ int ZLIB_INTERNAL inflate_table(codetype
     /* set up for code type */
     switch (type) {
     case CODES:
-        base = extra = work;    /* dummy value--not used */
         match = 20;
         break;
     case LENS:
@@ -183,10 +196,9 @@ int ZLIB_INTERNAL inflate_table(codetype
         extra = lext;
         match = 257;
         break;
-    default:    /* DISTS */
+    case DISTS:
         base = dbase;
         extra = dext;
-        match = 0;
     }
 
     /* initialize state for loop */
@@ -297,3 +309,116 @@ int ZLIB_INTERNAL inflate_table(codetype
     *bits = root;
     return 0;
 }
+
+#ifdef BUILDFIXED
+/*
+  If this is compiled with BUILDFIXED defined, and if inflate will be used in
+  multiple threads, and if atomics are not available, then inflate() must be
+  called with a fixed block (e.g. 0x03 0x00) to initialize the tables and must
+  return before any other threads are allowed to call inflate.
+ */
+
+static code *lenfix, *distfix;
+static code fixed[544];
+
+/* State for z_once(). */
+local z_once_t built = Z_ONCE_INIT;
+
+local void buildtables(void) {
+    unsigned sym, bits;
+    static code *next;
+    unsigned short lens[288], work[288];
+
+    /* literal/length table */
+    sym = 0;
+    while (sym < 144) lens[sym++] = 8;
+    while (sym < 256) lens[sym++] = 9;
+    while (sym < 280) lens[sym++] = 7;
+    while (sym < 288) lens[sym++] = 8;
+    next = fixed;
+    lenfix = next;
+    bits = 9;
+    inflate_table(LENS, lens, 288, &(next), &(bits), work);
+
+    /* distance table */
+    sym = 0;
+    while (sym < 32) lens[sym++] = 5;
+    distfix = next;
+    bits = 5;
+    inflate_table(DISTS, lens, 32, &(next), &(bits), work);
+}
+#else /* !BUILDFIXED */
+#  include "inffixed.h"
+#endif /* BUILDFIXED */
+
+/*
+   Return state with length and distance decoding tables and index sizes set to
+   fixed code decoding.  Normally this returns fixed tables from inffixed.h.
+   If BUILDFIXED is defined, then instead this routine builds the tables the
+   first time it's called, and returns those tables the first time and
+   thereafter.  This reduces the size of the code by about 2K bytes, in
+   exchange for a little execution time.  However, BUILDFIXED should not be
+   used for threaded applications if atomics are not available, as it will
+   not be thread-safe.
+ */
+void inflate_fixed(struct inflate_state FAR *state) {
+#ifdef BUILDFIXED
+    z_once(&built, buildtables);
+#endif /* BUILDFIXED */
+    state->lencode = lenfix;
+    state->lenbits = 9;
+    state->distcode = distfix;
+    state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+   Write out the inffixed.h that will be #include'd above.  Defining MAKEFIXED
+   also defines BUILDFIXED, so the tables are built on the fly.  main() writes
+   those tables to stdout, which would directed to inffixed.h. Compile this
+   along with zutil.c:
+
+       cc -DMAKEFIXED -o fix inftrees.c zutil.c
+       ./fix > inffixed.h
+ */
+int main(void) {
+    unsigned low, size;
+    struct inflate_state state;
+
+    inflate_fixed(&state);
+    puts("/* inffixed.h -- table for decoding fixed codes");
+    puts(" * Generated automatically by makefixed().");
+    puts(" */");
+    puts("");
+    puts("/* WARNING: this file should *not* be used by applications.");
+    puts("   It is part of the implementation of this library and is");
+    puts("   subject to change. Applications should only use zlib.h.");
+    puts(" */");
+    puts("");
+    size = 1U << 9;
+    printf("static const code lenfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 7) == 0) printf("\n    ");
+        printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+               state.lencode[low].bits, state.lencode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n};");
+    size = 1U << 5;
+    printf("\nstatic const code distfix[%u] = {", size);
+    low = 0;
+    for (;;) {
+        if ((low % 6) == 0) printf("\n    ");
+        printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+               state.distcode[low].val);
+        if (++low == size) break;
+        putchar(',');
+    }
+    puts("\n};");
+    return 0;
+}
+#endif /* MAKEFIXED */
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h,v
diff -u -p -a -u -p -r1.1.1.4 inftrees.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h	28 Jan 2025 01:04:23 -0000	1.1.1.4
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inftrees.h	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* inftrees.h -- header to use inftrees.c
- * Copyright (C) 1995-2005, 2010 Mark Adler
+ * Copyright (C) 1995-2026 Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -60,3 +60,5 @@ typedef enum {
 int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens,
                                 unsigned codes, code FAR * FAR *table,
                                 unsigned FAR *bits, unsigned short FAR *work);
+struct inflate_state;
+void ZLIB_INTERNAL inflate_fixed(struct inflate_state FAR *state);
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c,v
diff -u -p -a -u -p -r1.11 trees.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c	28 Jan 2025 01:06:11 -0000	1.11
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* trees.c -- output deflated data using Huffman coding
- * Copyright (C) 1995-2024 Jean-loup Gailly
+ * Copyright (C) 1995-2026 Jean-loup Gailly
  * detect_data_type() function provided freely by Cosmin Truta, 2006
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
@@ -112,7 +112,7 @@ local int base_dist[D_CODES];
 
 #else
 #  include "trees.h"
-#endif /* GEN_TREES_H */
+#endif /* defined(GEN_TREES_H) || !defined(STDC) */
 
 struct static_tree_desc_s {
     const ct_data *static_tree;  /* static tree or NULL */
@@ -152,7 +152,7 @@ local TCONST static_tree_desc static_bl_
  * IN assertion: 1 <= len <= 15
  */
 local unsigned bi_reverse(unsigned code, int len) {
-    register unsigned res = 0;
+    unsigned res = 0;
     do {
         res |= code & 1;
         code >>= 1, res <<= 1;
@@ -184,10 +184,11 @@ local void bi_windup(deflate_state *s) {
     } else if (s->bi_valid > 0) {
         put_byte(s, (Byte)s->bi_buf);
     }
+    s->bi_used = ((s->bi_valid - 1) & 7) + 1;
     s->bi_buf = 0;
     s->bi_valid = 0;
 #ifdef ZLIB_DEBUG
-    s->bits_sent = (s->bits_sent + 7) & ~7;
+    s->bits_sent = (s->bits_sent + 7) & ~(ulg)7;
 #endif
 }
 
@@ -466,6 +467,7 @@ void ZLIB_INTERNAL _tr_init(deflate_stat
 
     s->bi_buf = 0;
     s->bi_valid = 0;
+    s->bi_used = 0;
 #ifdef ZLIB_DEBUG
     s->compressed_len = 0L;
     s->bits_sent = 0L;
@@ -724,7 +726,7 @@ local void scan_tree(deflate_state *s, c
         if (++count < max_count && curlen == nextlen) {
             continue;
         } else if (count < min_count) {
-            s->bl_tree[curlen].Freq += count;
+            s->bl_tree[curlen].Freq += (ush)count;
         } else if (curlen != 0) {
             if (curlen != prevlen) s->bl_tree[curlen].Freq++;
             s->bl_tree[REP_3_6].Freq++;
@@ -817,7 +819,7 @@ local int build_bl_tree(deflate_state *s
     }
     /* Update opt_len to include the bit length tree and counts */
     s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4;
-    Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+    Tracev((stderr, "\ndyn trees: dyn %lu, stat %lu",
             s->opt_len, s->static_len));
 
     return max_blindex;
@@ -843,13 +845,13 @@ local void send_all_trees(deflate_state 
         Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
         send_bits(s, s->bl_tree[bl_order[rank]].Len, 3);
     }
-    Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+    Tracev((stderr, "\nbl tree: sent %lu", s->bits_sent));
 
     send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1);  /* literal tree */
-    Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+    Tracev((stderr, "\nlit tree: sent %lu", s->bits_sent));
 
     send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1);  /* distance tree */
-    Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+    Tracev((stderr, "\ndist tree: sent %lu", s->bits_sent));
 }
 
 /* ===========================================================================
@@ -932,7 +934,7 @@ local void compress_block(deflate_state 
             extra = extra_dbits[code];
             if (extra != 0) {
                 dist -= (unsigned)base_dist[code];
-                send_bits(s, dist, extra);   /* send the extra distance bits */
+                send_bits(s, (int)dist, extra); /* send the extra bits */
             }
         } /* literal or match pair ? */
 
@@ -1006,11 +1008,11 @@ void ZLIB_INTERNAL _tr_flush_block(defla
 
         /* Construct the literal and distance trees */
         build_tree(s, (tree_desc *)(&(s->l_desc)));
-        Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+        Tracev((stderr, "\nlit data: dyn %lu, stat %lu", s->opt_len,
                 s->static_len));
 
         build_tree(s, (tree_desc *)(&(s->d_desc)));
-        Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+        Tracev((stderr, "\ndist data: dyn %lu, stat %lu", s->opt_len,
                 s->static_len));
         /* At this point, opt_len and static_len are the total bit lengths of
          * the compressed block data, excluding the tree representations.
@@ -1083,7 +1085,7 @@ void ZLIB_INTERNAL _tr_flush_block(defla
 #endif
     }
     Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3,
-           s->compressed_len - 7*last));
+           s->compressed_len - 7*(ulg)last));
 }
 
 /* ===========================================================================
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c,v
diff -u -p -a -u -p -r1.6 uncompr.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c	28 Jan 2025 01:06:11 -0000	1.6
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/uncompr.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* uncompr.c -- decompress a memory buffer
- * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -23,24 +23,24 @@
    memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
    Z_DATA_ERROR if the input data was corrupted, including if the input data is
    an incomplete zlib stream.
+
+     The _z versions of the functions take size_t length arguments.
 */
-int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
-                        uLong *sourceLen) {
+int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen, const Bytef *source,
+                          z_size_t *sourceLen) {
     z_stream stream;
     int err;
     const uInt max = (uInt)-1;
-    uLong len, left;
-    Byte buf[1];    /* for detection of incomplete stream when *destLen == 0 */
+    z_size_t len, left;
+
+    if (sourceLen == NULL || (*sourceLen > 0 && source == NULL) ||
+        destLen == NULL || (*destLen > 0 && dest == NULL))
+        return Z_STREAM_ERROR;
 
     len = *sourceLen;
-    if (*destLen) {
-        left = *destLen;
-        *destLen = 0;
-    }
-    else {
-        left = 1;
-        dest = buf;
-    }
+    left = *destLen;
+    if (left == 0 && dest == Z_NULL)
+        dest = (Bytef *)&stream.reserved;       /* next_out cannot be NULL */
 
     stream.next_in = (z_const Bytef *)source;
     stream.avail_in = 0;
@@ -56,30 +56,46 @@ int ZEXPORT uncompress2(Bytef *dest, uLo
 
     do {
         if (stream.avail_out == 0) {
-            stream.avail_out = left > (uLong)max ? max : (uInt)left;
+            stream.avail_out = left > (z_size_t)max ? max : (uInt)left;
             left -= stream.avail_out;
         }
         if (stream.avail_in == 0) {
-            stream.avail_in = len > (uLong)max ? max : (uInt)len;
+            stream.avail_in = len > (z_size_t)max ? max : (uInt)len;
             len -= stream.avail_in;
         }
         err = inflate(&stream, Z_NO_FLUSH);
     } while (err == Z_OK);
 
-    *sourceLen -= len + stream.avail_in;
-    if (dest != buf)
-        *destLen = stream.total_out;
-    else if (stream.total_out && err == Z_BUF_ERROR)
-        left = 1;
+    /* Set len and left to the unused input data and unused output space. Set
+       *sourceLen to the amount of input consumed. Set *destLen to the amount
+       of data produced. */
+    len += stream.avail_in;
+    left += stream.avail_out;
+    *sourceLen -= len;
+    *destLen -= left;
 
     inflateEnd(&stream);
     return err == Z_STREAM_END ? Z_OK :
            err == Z_NEED_DICT ? Z_DATA_ERROR  :
-           err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
+           err == Z_BUF_ERROR && len == 0 ? Z_DATA_ERROR :
            err;
 }
-
+int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
+                        uLong *sourceLen) {
+    int ret;
+    z_size_t got = *destLen, used = *sourceLen;
+    ret = uncompress2_z(dest, &got, source, &used);
+    *sourceLen = (uLong)used;
+    *destLen = (uLong)got;
+    return ret;
+}
+int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen, const Bytef *source,
+                         z_size_t sourceLen) {
+    z_size_t used = sourceLen;
+    return uncompress2_z(dest, destLen, source, &used);
+}
 int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source,
                        uLong sourceLen) {
-    return uncompress2(dest, destLen, source, &sourceLen);
+    uLong used = sourceLen;
+    return uncompress2(dest, destLen, source, &used);
 }
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h,v
diff -u -p -a -u -p -r1.9 zconf.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h	28 Jan 2025 01:06:11 -0000	1.9
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* zconf.h -- configuration of the zlib compression library
- * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -8,6 +8,8 @@
 #ifndef ZCONF_H
 #define ZCONF_H
 
+#include <stddef.h>         /* Compress::Raw::Zlib change -- Needed for NULL */
+
 /*
  * If you *really* need a unique prefix for all types and library functions,
  * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it.
@@ -33,7 +35,10 @@
 #  ifndef Z_SOLO
 #    define compress              z_compress
 #    define compress2             z_compress2
+#    define compress_z            z_compress_z
+#    define compress2_z           z_compress2_z
 #    define compressBound         z_compressBound
+#    define compressBound_z       z_compressBound_z
 #  endif
 #  define crc32                 Perl_crz_crc32
 #  define crc32_combine         Perl_crz_crc32_combine
@@ -44,6 +49,7 @@
 #  define crc32_z               Perl_crz_crc32_z
 #  define deflate               Perl_crz_deflate
 #  define deflateBound          Perl_crz_deflateBound
+#  define deflateBound_z        Perl_crz_deflateBound_z
 #  define deflateCopy           Perl_crz_deflateCopy
 #  define deflateEnd            Perl_crz_deflateEnd
 #  define deflateGetDictionary  Perl_crz_deflateGetDictionary
@@ -59,6 +65,7 @@
 #  define deflateSetDictionary  Perl_crz_deflateSetDictionary
 #  define deflateSetHeader      Perl_crz_deflateSetHeader
 #  define deflateTune           Perl_crz_deflateTune
+#  define deflateUsed           Perl_crz_deflateUsed
 #  define deflate_copyright     Perl_crz_deflate_copyright
 #  define get_crc_table         Perl_crz_get_crc_table
 #  ifndef Z_SOLO
@@ -128,11 +135,15 @@
 #  define inflate_copyright     Perl_crz_inflate_copyright
 #  define inflate_fast          Perl_crz_inflate_fast
 #  define inflate_table         Perl_crz_inflate_table
+#  define inflate_fixed         Perl_crz_inflate_fixed
 #  ifndef Z_SOLO
 #    define uncompress            z_uncompress
 #    define uncompress2           z_uncompress2
+#    define uncompress_z          z_uncompress_z
+#    define uncompress2_z         z_uncompress2_z
 #  endif
 #  define zError                Perl_crz_zError
+#  define z_errmsg              Perl_crz_errmsg
 #  ifndef Z_SOLO
 #    define zcalloc               z_zcalloc
 #    define zcfree                z_zcfree
@@ -149,8 +160,8 @@
 #  ifndef Z_SOLO
 #    define gzFile                z_gzFile
 #  endif
-#  define gz_header             Perl_crz_gz_header
-#  define gz_headerp            Perl_crz_gz_headerp
+#  define gz_header             Perl_crz_gPerl_crz_header
+#  define gz_headerp            Perl_crz_gPerl_crz_headerp
 #  define in_func               Perl_crz_in_func
 #  define intf                  Perl_crz_intf
 #  define out_func              Perl_crz_out_func
@@ -234,10 +245,12 @@
 #  endif
 #endif
 
-#if defined(ZLIB_CONST) && !defined(z_const)
-#  define z_const const
-#else
-#  define z_const
+#ifndef z_const
+#  ifdef ZLIB_CONST
+#    define z_const const
+#  else
+#    define z_const
+#  endif
 #endif
 
 #ifdef Z_SOLO
@@ -408,12 +421,12 @@ typedef uLong FAR uLongf;
 
 #ifdef STDC
    typedef void const *voidpc;
-   typedef Bytef      *voidpf;
-   typedef Bytef      *voidp;
+   typedef void FAR   *voidpf;
+   typedef void       *voidp;
 #else
    typedef Byte const *voidpc;
-   typedef Bytef      *voidpf;
-   typedef Bytef      *voidp;
+   typedef Byte FAR   *voidpf;
+   typedef Byte       *voidp;
 #endif
 
 #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC)
@@ -433,11 +446,11 @@ typedef uLong FAR uLongf;
    typedef unsigned long z_crc_t;
 #endif
 
-#ifdef HAVE_UNISTD_H    /* may be set to #if 1 by ./configure */
+#if HAVE_UNISTD_H-0     /* may be set to #if 1 by ./configure */
 #  define Z_HAVE_UNISTD_H
 #endif
 
-#ifdef HAVE_STDARG_H    /* may be set to #if 1 by ./configure */
+#if HAVE_STDARG_H-0     /* may be set to #if 1 by ./configure */
 #  define Z_HAVE_STDARG_H
 #endif
 
@@ -470,12 +483,8 @@ typedef uLong FAR uLongf;
 #endif
 
 #ifndef Z_HAVE_UNISTD_H
-#  ifdef __WATCOMC__
-#    define Z_HAVE_UNISTD_H
-#  endif
-#endif
-#ifndef Z_HAVE_UNISTD_H
-#  if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32)
+#  if defined(__WATCOMC__) || defined(__GO32__) || \
+      (defined(_LARGEFILE64_SOURCE) && !defined(_WIN32))
 #    define Z_HAVE_UNISTD_H
 #  endif
 #endif
@@ -510,17 +519,19 @@ typedef uLong FAR uLongf;
 #endif
 
 #ifndef z_off_t
-#  define z_off_t long
+#  define z_off_t long long
 #endif
 
 #if !defined(_WIN32) && defined(Z_LARGE64)
 #  define z_off64_t off64_t
+#elif defined(__MINGW32__)
+#  define z_off64_t long long
+#elif defined(_WIN32) && !defined(__GNUC__)
+#  define z_off64_t __int64
+#elif defined(__GO32__)
+#  define z_off64_t offset_t
 #else
-#  if defined(_WIN32) && !defined(__GNUC__)
-#    define z_off64_t __int64
-#  else
-#    define z_off64_t z_off_t
-#  endif
+#  define z_off64_t z_off_t
 #endif
 
 /* MVS linker does not support external names larger than 8 bytes */
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h,v
diff -u -p -a -u -p -r1.1.1.8 zlib.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h	28 Jan 2025 01:04:23 -0000	1.1.1.8
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zlib.h	29 Mar 2026 16:31:42 -0000
@@ -1,7 +1,7 @@
 /* zlib.h -- interface of the 'zlib' general purpose compression library
-  version 1.3.1, January 22nd, 2024
+  version 1.3.2, February 17th, 2026
 
-  Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
+  Copyright (C) 1995-2026 Jean-loup Gailly and Mark Adler
 
   This software is provided 'as-is', without any express or implied
   warranty.  In no event will the authors be held liable for any damages
@@ -24,24 +24,28 @@
 
 
   The data format used by the zlib library is described by RFCs (Request for
-  Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950
+  Comments) 1950 to 1952 at https://datatracker.ietf.org/doc/html/rfc1950
   (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format).
 */
 
 #ifndef ZLIB_H
 #define ZLIB_H
 
-#include "zconf.h"
+#ifdef ZLIB_BUILD
+#  include <zconf.h>
+#else
+# include "zconf.h"
+#endif
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#define ZLIB_VERSION "1.3.1"
-#define ZLIB_VERNUM 0x1310
+#define ZLIB_VERSION "1.3.2"
+#define ZLIB_VERNUM 0x1320
 #define ZLIB_VER_MAJOR 1
 #define ZLIB_VER_MINOR 3
-#define ZLIB_VER_REVISION 1
+#define ZLIB_VER_REVISION 2
 #define ZLIB_VER_SUBREVISION 0
 
 /*
@@ -441,7 +445,7 @@ ZEXTERN int ZEXPORT inflate(z_streamp st
 
     The Z_BLOCK option assists in appending to or combining deflate streams.
   To assist in this, on return inflate() always sets strm->data_type to the
-  number of unused bits in the last byte taken from strm->next_in, plus 64 if
+  number of unused bits in the input taken from strm->next_in, plus 64 if
   inflate() is currently decoding the last block in the deflate stream, plus
   128 if inflate() returned immediately after decoding an end-of-block code or
   decoding the complete header up to just before the first byte of the deflate
@@ -587,18 +591,21 @@ ZEXTERN int ZEXPORT deflateInit2(z_strea
 
      The strategy parameter is used to tune the compression algorithm.  Use the
    value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a
-   filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no
-   string match), or Z_RLE to limit match distances to one (run-length
-   encoding).  Filtered data consists mostly of small values with a somewhat
-   random distribution.  In this case, the compression algorithm is tuned to
-   compress them better.  The effect of Z_FILTERED is to force more Huffman
-   coding and less string matching; it is somewhat intermediate between
-   Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.  Z_RLE is designed to be almost as
-   fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data.  The
-   strategy parameter only affects the compression ratio but not the
-   correctness of the compressed output even if it is not set appropriately.
-   Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler
-   decoder for special applications.
+   filter (or predictor), Z_RLE to limit match distances to one (run-length
+   encoding), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string
+   matching).  Filtered data consists mostly of small values with a somewhat
+   random distribution, as produced by the PNG filters.  In this case, the
+   compression algorithm is tuned to compress them better.  The effect of
+   Z_FILTERED is to force more Huffman coding and less string matching than the
+   default; it is intermediate between Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY.
+   Z_RLE is almost as fast as Z_HUFFMAN_ONLY, but should give better
+   compression for PNG image data than Huffman only.  The degree of string
+   matching from most to none is: Z_DEFAULT_STRATEGY, Z_FILTERED, Z_RLE, then
+   Z_HUFFMAN_ONLY. The strategy parameter affects the compression ratio but
+   never the correctness of the compressed output, even if it is not set
+   optimally for the given data.  Z_FIXED uses the default string matching, but
+   prevents the use of dynamic Huffman codes, allowing for a simpler decoder
+   for special applications.
 
      deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
    memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid
@@ -758,8 +765,8 @@ ZEXTERN int ZEXPORT deflateTune(z_stream
    returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream.
  */
 
-ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm,
-                                   uLong sourceLen);
+ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen);
+ZEXTERN z_size_t ZEXPORT deflateBound_z(z_streamp strm, z_size_t sourceLen);
 /*
      deflateBound() returns an upper bound on the compressed size after
    deflation of sourceLen bytes.  It must be called after deflateInit() or
@@ -771,6 +778,9 @@ ZEXTERN uLong ZEXPORT deflateBound(z_str
    to return Z_STREAM_END.  Note that it is possible for the compressed size to
    be larger than the value returned by deflateBound() if flush options other
    than Z_FINISH or Z_NO_FLUSH are used.
+
+     delfateBound_z() is the same, but takes and returns a size_t length.  Note
+   that a long is 32 bits on Windows.
 */
 
 ZEXTERN int ZEXPORT deflatePending(z_streamp strm,
@@ -785,6 +795,21 @@ ZEXTERN int ZEXPORT deflatePending(z_str
    or bits are Z_NULL, then those values are not set.
 
      deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source
+   stream state was inconsistent.  If an int is 16 bits and memLevel is 9, then
+   it is possible for the number of pending bytes to not fit in an unsigned. In
+   that case Z_BUF_ERROR is returned and *pending is set to the maximum value
+   of an unsigned.
+ */
+
+ZEXTERN int ZEXPORT deflateUsed(z_streamp strm,
+                                int *bits);
+/*
+     deflateUsed() returns in *bits the most recent number of deflate bits used
+   in the last byte when flushing to a byte boundary. The result is in 1..8, or
+   0 if there has not yet been a flush. This helps determine the location of
+   the last bit of a deflate stream.
+
+     deflateUsed returns Z_OK if success, or Z_STREAM_ERROR if the source
    stream state was inconsistent.
  */
 
@@ -987,13 +1012,15 @@ ZEXTERN int ZEXPORT inflatePrime(z_strea
                                  int bits,
                                  int value);
 /*
-     This function inserts bits in the inflate input stream.  The intent is
-   that this function is used to start inflating at a bit position in the
-   middle of a byte.  The provided bits will be used before any bytes are used
-   from next_in.  This function should only be used with raw inflate, and
-   should be used before the first inflate() call after inflateInit2() or
-   inflateReset().  bits must be less than or equal to 16, and that many of the
-   least significant bits of value will be inserted in the input.
+     This function inserts bits in the inflate input stream.  The intent is to
+   use inflatePrime() to start inflating at a bit position in the middle of a
+   byte.  The provided bits will be used before any bytes are used from
+   next_in.  This function should be used with raw inflate, before the first
+   inflate() call, after inflateInit2() or inflateReset().  It can also be used
+   after an inflate() return indicates the end of a deflate block or header
+   when using Z_BLOCK.  bits must be less than or equal to 16, and that many of
+   the least significant bits of value will be inserted in the input.  The
+   other bits in value can be non-zero, and will be ignored.
 
      If bits is negative, then the input stream bit buffer is emptied.  Then
    inflatePrime() can be called again to put bits in the buffer.  This is used
@@ -1001,7 +1028,15 @@ ZEXTERN int ZEXPORT inflatePrime(z_strea
    to feeding inflate codes.
 
      inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source
-   stream state was inconsistent.
+   stream state was inconsistent, or if bits is out of range.  If inflate was
+   in the middle of processing a header, trailer, or stored block lengths, then
+   it is possible for there to be only eight bits available in the bit buffer.
+   In that case, bits > 8 is considered out of range.  However, when used as
+   outlined above, there will always be 16 bits available in the buffer for
+   insertion.  As noted in its documentation above, inflate records the number
+   of bits in the bit buffer on return in data_type. 32 minus that is the
+   number of bits available for insertion.  inflatePrime does not update
+   data_type with the new number of bits in buffer.
 */
 
 ZEXTERN long ZEXPORT inflateMark(z_streamp strm);
@@ -1047,20 +1082,22 @@ ZEXTERN int ZEXPORT inflateGetHeader(z_s
 
      The text, time, xflags, and os fields are filled in with the gzip header
    contents.  hcrc is set to true if there is a header CRC.  (The header CRC
-   was valid if done is set to one.) If extra is not Z_NULL, then extra_max
-   contains the maximum number of bytes to write to extra.  Once done is true,
-   extra_len contains the actual extra field length, and extra contains the
-   extra field, or that field truncated if extra_max is less than extra_len.
-   If name is not Z_NULL, then up to name_max characters are written there,
-   terminated with a zero unless the length is greater than name_max.  If
-   comment is not Z_NULL, then up to comm_max characters are written there,
-   terminated with a zero unless the length is greater than comm_max.  When any
-   of extra, name, or comment are not Z_NULL and the respective field is not
-   present in the header, then that field is set to Z_NULL to signal its
-   absence.  This allows the use of deflateSetHeader() with the returned
-   structure to duplicate the header.  However if those fields are set to
-   allocated memory, then the application will need to save those pointers
-   elsewhere so that they can be eventually freed.
+   was valid if done is set to one.)  The extra, name, and comment pointers
+   much each be either Z_NULL or point to space to store that information from
+   the header.  If extra is not Z_NULL, then extra_max contains the maximum
+   number of bytes that can be written to extra.  Once done is true, extra_len
+   contains the actual extra field length, and extra contains the extra field,
+   or that field truncated if extra_max is less than extra_len.  If name is not
+   Z_NULL, then up to name_max characters, including the terminating zero, are
+   written there.  If comment is not Z_NULL, then up to comm_max characters,
+   including the terminating zero, are written there.  The application can tell
+   that the name or comment did not fit in the provided space by the absence of
+   a terminating zero.  If any of extra, name, or comment are not present in
+   the header, then that field's pointer is set to Z_NULL.  This allows the use
+   of deflateSetHeader() with the returned structure to duplicate the header.
+   Note that if those fields initially pointed to allocated memory, then the
+   application will need to save them elsewhere so that they can be eventually
+   freed.
 
      If inflateGetHeader is not used, then the header information is simply
    discarded.  The header is always checked for validity, including the header
@@ -1208,13 +1245,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(v
      21: FASTEST -- deflate algorithm with only one, lowest compression level
      22,23: 0 (reserved)
 
-    The sprintf variant used by gzprintf (zero is best):
+    The sprintf variant used by gzprintf (all zeros is best):
      24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format
-     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure!
+     25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() is not secure!
      26: 0 = returns value, 1 = void -- 1 means inferred string length returned
+     27: 0 = gzprintf() present, 1 = not -- 1 means gzprintf() returns an error
 
     Remainder:
-     27-31: 0 (reserved)
+     28-31: 0 (reserved)
  */
 
 #ifndef Z_SOLO
@@ -1226,11 +1264,14 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(v
    stream-oriented functions.  To simplify the interface, some default options
    are assumed (compression level and memory usage, standard memory allocation
    functions).  The source code of these utility functions can be modified if
-   you need special options.
+   you need special options.  The _z versions of the functions use the size_t
+   type for lengths.  Note that a long is 32 bits on Windows.
 */
 
-ZEXTERN int ZEXPORT compress(Bytef *dest,   uLongf *destLen,
+ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen,
                              const Bytef *source, uLong sourceLen);
+ZEXTERN int ZEXPORT compress_z(Bytef *dest, z_size_t *destLen,
+                               const Bytef *source, z_size_t sourceLen);
 /*
      Compresses the source buffer into the destination buffer.  sourceLen is
    the byte length of the source buffer.  Upon entry, destLen is the total size
@@ -1244,9 +1285,12 @@ ZEXTERN int ZEXPORT compress(Bytef *dest
    buffer.
 */
 
-ZEXTERN int ZEXPORT compress2(Bytef *dest,   uLongf *destLen,
+ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen,
                               const Bytef *source, uLong sourceLen,
                               int level);
+ZEXTERN int ZEXPORT compress2_z(Bytef *dest, z_size_t *destLen,
+                                const Bytef *source, z_size_t sourceLen,
+                                int level);
 /*
      Compresses the source buffer into the destination buffer.  The level
    parameter has the same meaning as in deflateInit.  sourceLen is the byte
@@ -1261,21 +1305,24 @@ ZEXTERN int ZEXPORT compress2(Bytef *des
 */
 
 ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen);
+ZEXTERN z_size_t ZEXPORT compressBound_z(z_size_t sourceLen);
 /*
      compressBound() returns an upper bound on the compressed size after
    compress() or compress2() on sourceLen bytes.  It would be used before a
    compress() or compress2() call to allocate the destination buffer.
 */
 
-ZEXTERN int ZEXPORT uncompress(Bytef *dest,   uLongf *destLen,
+ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen,
                                const Bytef *source, uLong sourceLen);
+ZEXTERN int ZEXPORT uncompress_z(Bytef *dest, z_size_t *destLen,
+                                 const Bytef *source, z_size_t sourceLen);
 /*
      Decompresses the source buffer into the destination buffer.  sourceLen is
-   the byte length of the source buffer.  Upon entry, destLen is the total size
+   the byte length of the source buffer.  On entry, *destLen is the total size
    of the destination buffer, which must be large enough to hold the entire
    uncompressed data.  (The size of the uncompressed data must have been saved
    previously by the compressor and transmitted to the decompressor by some
-   mechanism outside the scope of this compression library.) Upon exit, destLen
+   mechanism outside the scope of this compression library.)  On exit, *destLen
    is the actual size of the uncompressed data.
 
      uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
@@ -1285,8 +1332,10 @@ ZEXTERN int ZEXPORT uncompress(Bytef *de
    buffer with the uncompressed data up to that point.
 */
 
-ZEXTERN int ZEXPORT uncompress2(Bytef *dest,   uLongf *destLen,
+ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen,
                                 const Bytef *source, uLong *sourceLen);
+ZEXTERN int ZEXPORT uncompress2_z(Bytef *dest, z_size_t *destLen,
+                                  const Bytef *source, z_size_t *sourceLen);
 /*
      Same as uncompress, except that sourceLen is a pointer, where the
    length of the source is *sourceLen.  On return, *sourceLen is the number of
@@ -1314,13 +1363,17 @@ ZEXTERN gzFile ZEXPORT gzopen(const char
    'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression
    as in "wb9F".  (See the description of deflateInit2 for more information
    about the strategy parameter.)  'T' will request transparent writing or
-   appending with no compression and not using the gzip format.
+   appending with no compression and not using the gzip format. 'T' cannot be
+   used to force transparent reading. Transparent reading is automatically
+   performed if there is no gzip header at the start. Transparent reading can
+   be disabled with the 'G' option, which will instead return an error if there
+   is no gzip header. 'N' will open the file in non-blocking mode.
 
-     "a" can be used instead of "w" to request that the gzip stream that will
-   be written be appended to the file.  "+" will result in an error, since
+     'a' can be used instead of 'w' to request that the gzip stream that will
+   be written be appended to the file.  '+' will result in an error, since
    reading and writing to the same gzip file is not supported.  The addition of
-   "x" when writing will create the file exclusively, which fails if the file
-   already exists.  On systems that support it, the addition of "e" when
+   'x' when writing will create the file exclusively, which fails if the file
+   already exists.  On systems that support it, the addition of 'e' when
    reading or writing will set the flag to close the file on an execve() call.
 
      These functions, as well as gzip, will read and decode a sequence of gzip
@@ -1339,14 +1392,22 @@ ZEXTERN gzFile ZEXPORT gzopen(const char
    insufficient memory to allocate the gzFile state, or if an invalid mode was
    specified (an 'r', 'w', or 'a' was not provided, or '+' was provided).
    errno can be checked to determine if the reason gzopen failed was that the
-   file could not be opened.
+   file could not be opened. Note that if 'N' is in mode for non-blocking, the
+   open() itself can fail in order to not block. In that case gzopen() will
+   return NULL and errno will be EAGAIN or ENONBLOCK. The call to gzopen() can
+   then be re-tried. If the application would like to block on opening the
+   file, then it can use open() without O_NONBLOCK, and then gzdopen() with the
+   resulting file descriptor and 'N' in the mode, which will set it to non-
+   blocking.
 */
 
 ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode);
 /*
      Associate a gzFile with the file descriptor fd.  File descriptors are
    obtained from calls like open, dup, creat, pipe or fileno (if the file has
-   been previously opened with fopen).  The mode parameter is as in gzopen.
+   been previously opened with fopen).  The mode parameter is as in gzopen. An
+   'e' in mode will set fd's flag to close the file on an execve() call. An 'N'
+   in mode will set fd's non-blocking flag.
 
      The next call of gzclose on the returned gzFile will also close the file
    descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor
@@ -1416,10 +1477,16 @@ ZEXTERN int ZEXPORT gzread(gzFile file, 
    stream.  Alternatively, gzerror can be used before gzclose to detect this
    case.
 
+     gzread can be used to read a gzip file on a non-blocking device. If the
+   input stalls and there is no uncompressed data to return, then gzread() will
+   return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be
+   called again.
+
      gzread returns the number of uncompressed bytes actually read, less than
    len for end of file, or -1 for error.  If len is too large to fit in an int,
    then nothing is read, -1 is returned, and the error state is set to
-   Z_STREAM_ERROR.
+   Z_STREAM_ERROR. If some data was read before an error, then that data is
+   returned until exhausted, after which the next call will signal the error.
 */
 
 ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems,
@@ -1443,15 +1510,20 @@ ZEXTERN z_size_t ZEXPORT gzfread(voidp b
    multiple of size, then the final partial item is nevertheless read into buf
    and the end-of-file flag is set.  The length of the partial item read is not
    provided, but could be inferred from the result of gztell().  This behavior
-   is the same as the behavior of fread() implementations in common libraries,
-   but it prevents the direct use of gzfread() to read a concurrently written
-   file, resetting and retrying on end-of-file, when size is not 1.
+   is the same as that of fread() implementations in common libraries. This
+   could result in data loss if used with size != 1 when reading a concurrently
+   written file or a non-blocking file. In that case, use size == 1 or gzread()
+   instead.
 */
 
 ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len);
 /*
      Compress and write the len uncompressed bytes at buf to file. gzwrite
-   returns the number of uncompressed bytes written or 0 in case of error.
+   returns the number of uncompressed bytes written, or 0 in case of error or
+   if len is 0.  If the write destination is non-blocking, then gzwrite() may
+   return a number of bytes written that is not 0 and less than len.
+
+     If len does not fit in an int, then 0 is returned and nothing is written.
 */
 
 ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size,
@@ -1466,9 +1538,18 @@ ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc
    if there was an error.  If the multiplication of size and nitems overflows,
    i.e. the product does not fit in a z_size_t, then nothing is written, zero
    is returned, and the error state is set to Z_STREAM_ERROR.
+
+     If writing a concurrently read file or a non-blocking file with size != 1,
+   a partial item could be written, with no way of knowing how much of it was
+   not written, resulting in data loss.  In that case, use size == 1 or
+   gzwrite() instead.
 */
 
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
 ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...);
+#else
+ZEXTERN int ZEXPORTVA gzprintf();
+#endif
 /*
      Convert, format, compress, and write the arguments (...) to file under
    control of the string format, as in fprintf.  gzprintf returns the number of
@@ -1476,11 +1557,19 @@ ZEXTERN int ZEXPORTVA gzprintf(gzFile fi
    of error.  The number of uncompressed bytes written is limited to 8191, or
    one less than the buffer size given to gzbuffer().  The caller should assure
    that this limit is not exceeded.  If it is exceeded, then gzprintf() will
-   return an error (0) with nothing written.  In this case, there may also be a
-   buffer overflow with unpredictable consequences, which is possible only if
-   zlib was compiled with the insecure functions sprintf() or vsprintf(),
-   because the secure snprintf() or vsnprintf() functions were not available.
-   This can be determined using zlibCompileFlags().
+   return an error (0) with nothing written.
+
+     In that last case, there may also be a buffer overflow with unpredictable
+   consequences, which is possible only if zlib was compiled with the insecure
+   functions sprintf() or vsprintf(), because the secure snprintf() and
+   vsnprintf() functions were not available. That would only be the case for
+   a non-ANSI C compiler. zlib may have been built without gzprintf() because
+   secure functions were not available and having gzprintf() be insecure was
+   not an option, in which case, gzprintf() returns Z_STREAM_ERROR. All of
+   these possibilities can be determined using zlibCompileFlags().
+
+     If a Z_BUF_ERROR is returned, then nothing was written due to a stall on
+   the non-blocking write destination.
 */
 
 ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s);
@@ -1489,6 +1578,11 @@ ZEXTERN int ZEXPORT gzputs(gzFile file, 
    the terminating null character.
 
      gzputs returns the number of characters written, or -1 in case of error.
+   The number of characters written may be less than the length of the string
+   if the write destination is non-blocking.
+
+     If the length of the string does not fit in an int, then -1 is returned
+   and nothing is written.
 */
 
 ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len);
@@ -1501,8 +1595,13 @@ ZEXTERN char * ZEXPORT gzgets(gzFile fil
    left untouched.
 
      gzgets returns buf which is a null-terminated string, or it returns NULL
-   for end-of-file or in case of error.  If there was an error, the contents at
-   buf are indeterminate.
+   for end-of-file or in case of error. If some data was read before an error,
+   then that data is returned until exhausted, after which the next call will
+   return NULL to signal the error.
+
+     gzgets can be used on a file being concurrently written, and on a non-
+   blocking device, both as for gzread(). However lines may be broken in the
+   middle, leaving it up to the application to reassemble them as needed.
 */
 
 ZEXTERN int ZEXPORT gzputc(gzFile file, int c);
@@ -1513,11 +1612,19 @@ ZEXTERN int ZEXPORT gzputc(gzFile file, 
 
 ZEXTERN int ZEXPORT gzgetc(gzFile file);
 /*
-     Read and decompress one byte from file.  gzgetc returns this byte or -1
-   in case of end of file or error.  This is implemented as a macro for speed.
-   As such, it does not do all of the checking the other functions do.  I.e.
-   it does not check to see if file is NULL, nor whether the structure file
-   points to has been clobbered or not.
+     Read and decompress one byte from file. gzgetc returns this byte or -1 in
+   case of end of file or error. If some data was read before an error, then
+   that data is returned until exhausted, after which the next call will return
+   -1 to signal the error.
+
+     This is implemented as a macro for speed. As such, it does not do all of
+   the checking the other functions do. I.e. it does not check to see if file
+   is NULL, nor whether the structure file points to has been clobbered or not.
+
+     gzgetc can be used to read a gzip file on a non-blocking device. If the
+   input stalls and there is no uncompressed data to return, then gzgetc() will
+   return -1, and errno will be EAGAIN or EWOULDBLOCK. gzread() can then be
+   called again.
 */
 
 ZEXTERN int ZEXPORT gzungetc(int c, gzFile file);
@@ -1530,6 +1637,11 @@ ZEXTERN int ZEXPORT gzungetc(int c, gzFi
    output buffer size of pushed characters is allowed.  (See gzbuffer above.)
    The pushed character will be discarded if the stream is repositioned with
    gzseek() or gzrewind().
+
+     gzungetc(-1, file) will force any pending seek to execute. Then gztell()
+   will report the position, even if the requested seek reached end of file.
+   This can be used to determine the number of uncompressed bytes in a gzip
+   file without having to read it into a buffer.
 */
 
 ZEXTERN int ZEXPORT gzflush(gzFile file, int flush);
@@ -1559,7 +1671,8 @@ ZEXTERN z_off_t ZEXPORT gzseek(gzFile fi
      If the file is opened for reading, this function is emulated but can be
    extremely slow.  If the file is opened for writing, only forward seeks are
    supported; gzseek then compresses a sequence of zeroes up to the new
-   starting position.
+   starting position. For reading or writing, any actual seeking is deferred
+   until the next read or write operation, or close operation when writing.
 
      gzseek returns the resulting offset location as measured in bytes from
    the beginning of the uncompressed stream, or -1 in case of error, in
@@ -1567,7 +1680,7 @@ ZEXTERN z_off_t ZEXPORT gzseek(gzFile fi
    would be before the current position.
 */
 
-ZEXTERN int ZEXPORT    gzrewind(gzFile file);
+ZEXTERN int ZEXPORT gzrewind(gzFile file);
 /*
      Rewind file. This function is supported only for reading.
 
@@ -1575,7 +1688,7 @@ ZEXTERN int ZEXPORT    gzrewind(gzFile f
 */
 
 /*
-ZEXTERN z_off_t ZEXPORT    gztell(gzFile file);
+ZEXTERN z_off_t ZEXPORT gztell(gzFile file);
 
      Return the starting position for the next gzread or gzwrite on file.
    This position represents a number of bytes in the uncompressed data stream,
@@ -1620,8 +1733,11 @@ ZEXTERN int ZEXPORT gzdirect(gzFile file
 
      If gzdirect() is used immediately after gzopen() or gzdopen() it will
    cause buffers to be allocated to allow reading the file to determine if it
-   is a gzip file.  Therefore if gzbuffer() is used, it should be called before
-   gzdirect().
+   is a gzip file. Therefore if gzbuffer() is used, it should be called before
+   gzdirect(). If the input is being written concurrently or the device is non-
+   blocking, then gzdirect() may give a different answer once four bytes of
+   input have been accumulated, which is what is needed to confirm or deny a
+   gzip header. Before this, gzdirect() will return true (1).
 
      When writing, gzdirect() returns true (1) if transparent writing was
    requested ("wT" for the gzopen() mode), or false (0) otherwise.  (Note:
@@ -1631,7 +1747,7 @@ ZEXTERN int ZEXPORT gzdirect(gzFile file
    gzip file reading and decompression, which may not be desired.)
 */
 
-ZEXTERN int ZEXPORT    gzclose(gzFile file);
+ZEXTERN int ZEXPORT gzclose(gzFile file);
 /*
      Flush all pending output for file, if necessary, close file and
    deallocate the (de)compression state.  Note that once file is closed, you
@@ -1659,9 +1775,10 @@ ZEXTERN int ZEXPORT gzclose_w(gzFile fil
 ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum);
 /*
      Return the error message for the last error which occurred on file.
-   errnum is set to zlib error number.  If an error occurred in the file system
-   and not in the compression library, errnum is set to Z_ERRNO and the
-   application may consult errno to get the exact error code.
+   If errnum is not NULL, *errnum is set to zlib error number.  If an error
+   occurred in the file system and not in the compression library, *errnum is
+   set to Z_ERRNO and the application may consult errno to get the exact error
+   code.
 
      The application must not modify the returned string.  Future calls to
    this function may invalidate the previously returned string.  If file is
@@ -1712,7 +1829,8 @@ ZEXTERN uLong ZEXPORT adler32(uLong adle
 ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf,
                                 z_size_t len);
 /*
-     Same as adler32(), but with a size_t length.
+     Same as adler32(), but with a size_t length.  Note that a long is 32 bits
+   on Windows.
 */
 
 /*
@@ -1748,7 +1866,8 @@ ZEXTERN uLong ZEXPORT crc32(uLong crc, c
 ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf,
                               z_size_t len);
 /*
-     Same as crc32(), but with a size_t length.
+     Same as crc32(), but with a size_t length.  Note that a long is 32 bits on
+   Windows.
 */
 
 /*
@@ -1758,14 +1877,14 @@ ZEXTERN uLong ZEXPORT crc32_combine(uLon
    seq1 and seq2 with lengths len1 and len2, CRC-32 check values were
    calculated for each, crc1 and crc2.  crc32_combine() returns the CRC-32
    check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and
-   len2. len2 must be non-negative.
+   len2. len2 must be non-negative, otherwise zero is returned.
 */
 
 /*
 ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2);
 
      Return the operator corresponding to length len2, to be used with
-   crc32_combine_op(). len2 must be non-negative.
+   crc32_combine_op(). len2 must be non-negative, otherwise zero is returned.
 */
 
 ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op);
@@ -1888,9 +2007,9 @@ ZEXTERN int ZEXPORT gzgetc_(gzFile file)
      ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int);
      ZEXTERN z_off_t ZEXPORT gztell64(gzFile);
      ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile);
-     ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t);
-     ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t);
-     ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t);
+     ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t);
+     ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t);
+     ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t);
 #  endif
 #else
    ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *);
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c,v
diff -u -p -a -u -p -r1.9 zutil.c
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c	28 Jan 2025 01:06:11 -0000	1.9
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* zutil.c -- target dependent utility functions for the compression library
- * Copyright (C) 1995-2017 Jean-loup Gailly
+ * Copyright (C) 1995-2026 Jean-loup Gailly
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -86,28 +86,36 @@ uLong ZEXPORT zlibCompileFlags(void) {
     flags += 1L << 21;
 #endif
 #if defined(STDC) || defined(Z_HAVE_STDARG_H)
-#  ifdef NO_vsnprintf
-    flags += 1L << 25;
-#    ifdef HAS_vsprintf_void
-    flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_vsnprintf_void
-    flags += 1L << 26;
-#    endif
-#  endif
+#   ifdef NO_vsnprintf
+#       ifdef ZLIB_INSECURE
+            flags += 1L << 25;
+#       else
+            flags += 1L << 27;
+#       endif
+#       ifdef HAS_vsprintf_void
+            flags += 1L << 26;
+#       endif
+#   else
+#       ifdef HAS_vsnprintf_void
+            flags += 1L << 26;
+#       endif
+#   endif
 #else
     flags += 1L << 24;
-#  ifdef NO_snprintf
-    flags += 1L << 25;
-#    ifdef HAS_sprintf_void
-    flags += 1L << 26;
-#    endif
-#  else
-#    ifdef HAS_snprintf_void
-    flags += 1L << 26;
-#    endif
-#  endif
+#   ifdef NO_snprintf
+#       ifdef ZLIB_INSECURE
+            flags += 1L << 25;
+#       else
+            flags += 1L << 27;
+#       endif
+#       ifdef HAS_sprintf_void
+            flags += 1L << 26;
+#       endif
+#   else
+#       ifdef HAS_snprintf_void
+            flags += 1L << 26;
+#       endif
+#   endif
 #endif
     return flags;
 }
@@ -142,28 +150,34 @@ const char * ZEXPORT zError(int err) {
 
 #ifndef HAVE_MEMCPY
 
-void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) {
-    if (len == 0) return;
-    do {
-        *dest++ = *source++; /* ??? to be unrolled */
-    } while (--len != 0);
+void ZLIB_INTERNAL zmemcpy(void FAR *dst, const void FAR *src, z_size_t n) {
+    uchf *p = (uchf *)dst;
+    const uchf *q = (const uchf *)src;
+    while (n) {
+        *p++ = *q++;
+        n--;
+    }
 }
 
-int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) {
-    uInt j;
-
-    for (j = 0; j < len; j++) {
-        if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1;
+int ZLIB_INTERNAL zmemcmp(const void FAR *s1, const void FAR *s2, z_size_t n) {
+    const uchf *p = (const uchf *)s1, *q = (const uchf *)s2;
+    while (n) {
+        if (*p++ != *q++)
+            return (int)p[-1] - (int)q[-1];
+        n--;
     }
     return 0;
 }
 
-void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) {
+void ZLIB_INTERNAL zmemzero(void FAR *b, z_size_t len) {
+    uchf *p = (uchf *)b;
     if (len == 0) return;
-    do {
-        *dest++ = 0;  /* ??? to be unrolled */
-    } while (--len != 0);
+    while (len) {
+        *p++ = 0;
+        len--;
+    }
 }
+
 #endif
 
 #ifndef Z_SOLO
Index: gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h,v
diff -u -p -a -u -p -r1.9 zutil.h
--- gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h	28 Jan 2025 01:06:11 -0000	1.9
+++ gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h	29 Mar 2026 16:31:42 -0000
@@ -1,5 +1,5 @@
 /* zutil.h -- internal interface and configuration of the compression library
- * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler
+ * Copyright (C) 1995-2026 Jean-loup Gailly, Mark Adler
  * For conditions of distribution and use, see copyright notice in zlib.h
  */
 
@@ -36,6 +36,10 @@
    define "local" for the non-static meaning of "static", for readability
    (compile with -Dlocal if your debugger can't find static symbols) */
 
+extern const char deflate_copyright[];
+extern const char inflate_copyright[];
+extern const char inflate9_copyright[];
+
 typedef unsigned char  uch;
 typedef uch FAR uchf;
 typedef unsigned short ush;
@@ -48,6 +52,8 @@ typedef unsigned long  ulg;
 #    define Z_U8 unsigned long
 #  elif (ULLONG_MAX == 0xffffffffffffffff)
 #    define Z_U8 unsigned long long
+#  elif (ULONG_LONG_MAX == 0xffffffffffffffff)
+#    define Z_U8 unsigned long long
 #  elif (UINT_MAX == 0xffffffffffffffff)
 #    define Z_U8 unsigned
 #  endif
@@ -63,7 +69,9 @@ extern z_const char * const z_errmsg[10]
 /* To be used only when the state is known to be valid */
 
         /* common constants */
-
+#if MAX_WBITS < 9 || MAX_WBITS > 15
+#  error MAX_WBITS must be in 9..15
+#endif
 #ifndef DEF_WBITS
 #  define DEF_WBITS MAX_WBITS
 #endif
@@ -141,7 +149,7 @@ extern z_const char * const z_errmsg[10]
 #  define OS_CODE  7
 #endif
 
-#ifdef __acorn
+#if defined(__acorn) || defined(__riscos)
 #  define OS_CODE 13
 #endif
 
@@ -168,11 +176,10 @@ extern z_const char * const z_errmsg[10]
 #endif
 
 /* provide prototypes for these when building zlib without LFS */
-#if !defined(_WIN32) && \
-    (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0)
-    ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t);
-    ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t);
-    ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t);
+#ifndef Z_LARGE64
+   ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t);
+   ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t);
+   ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t);
 #endif
 
         /* common defaults */
@@ -211,9 +218,9 @@ extern z_const char * const z_errmsg[10]
 #    define zmemzero(dest, len) memset(dest, 0, len)
 #  endif
 #else
-   void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len);
-   int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len);
-   void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len);
+   void ZLIB_INTERNAL zmemcpy(void FAR *, const void FAR *, z_size_t);
+   int ZLIB_INTERNAL zmemcmp(const void FAR *, const void FAR *, z_size_t);
+   void ZLIB_INTERNAL zmemzero(void FAR *, z_size_t);
 #endif
 
 /* Diagnostic functions */
@@ -250,5 +257,75 @@ extern z_const char * const z_errmsg[10]
 /* Reverse the bytes in a 32-bit value */
 #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
                     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
+
+#ifdef Z_ONCE
+/*
+  Create a local z_once() function depending on the availability of atomics.
+ */
+
+/* Check for the availability of atomics. */
+#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \
+    !defined(__STDC_NO_ATOMICS__)
+
+#include <stdatomic.h>
+typedef struct {
+    atomic_flag begun;
+    atomic_int done;
+} z_once_t;
+#define Z_ONCE_INIT {ATOMIC_FLAG_INIT, 0}
+
+/*
+  Run the provided init() function exactly once, even if multiple threads
+  invoke once() at the same time. The state must be a once_t initialized with
+  Z_ONCE_INIT.
+ */
+local void z_once(z_once_t *state, void (*init)(void)) {
+    if (!atomic_load(&state->done)) {
+        if (atomic_flag_test_and_set(&state->begun))
+            while (!atomic_load(&state->done))
+                ;
+        else {
+            init();
+            atomic_store(&state->done, 1);
+        }
+    }
+}
+
+#else   /* no atomics */
+
+#warning zlib not thread-safe
+
+typedef struct z_once_s {
+    volatile int begun;
+    volatile int done;
+} z_once_t;
+#define Z_ONCE_INIT {0, 0}
+
+/* Test and set. Alas, not atomic, but tries to limit the period of
+   vulnerability. */
+local int test_and_set(int volatile *flag) {
+    int was;
+
+    was = *flag;
+    *flag = 1;
+    return was;
+}
+
+/* Run the provided init() function once. This is not thread-safe. */
+local void z_once(z_once_t *state, void (*init)(void)) {
+    if (!state->done) {
+        if (test_and_set(&state->begun))
+            while (!state->done)
+                ;
+        else {
+            init();
+            state->done = 1;
+        }
+    }
+}
+
+#endif /* ?atomics */
+
+#endif /* Z_ONCE */
 
 #endif /* ZUTIL_H */
Index: gnu/usr.bin/perl/dist/Module-CoreList/Changes
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/Changes,v
diff -u -p -a -u -p -r1.16 Changes
--- gnu/usr.bin/perl/dist/Module-CoreList/Changes	26 Dec 2025 22:14:18 -0000	1.16
+++ gnu/usr.bin/perl/dist/Module-CoreList/Changes	29 Mar 2026 16:31:44 -0000
@@ -1,3 +1,45 @@
+5.20260329_42
+  - Updated for v5.42.2
+
+5.20260320
+  - Updated for v5.43.9
+
+5.20260308
+  - Updated for v5.42.1
+
+5.20260220
+  - Updated for v5.43.8
+
+5.20260119
+  - Updated for v5.43.7
+
+5.20251220
+  - Updated for v5.43.6
+
+5.20251120
+  - Updated for v5.43.5
+
+5.20251022
+  - Updated for v5.43.4
+
+5.20250923
+  - Updated for v5.43.3
+
+5.20250820
+  - Updated for v5.43.2
+
+5.20250803_40
+  - Updated for v5.40.3
+
+5.20250803_38
+  - Updated for v5.38.5
+
+5.20250720
+  - Updated for v5.43.1
+
+5.20250703
+  - Updated for v5.43.0
+
 5.20250702
   - Updated for v5.42.0
 
Index: gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm,v
diff -u -p -a -u -p -r1.18 CoreList.pm
--- gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm	26 Dec 2025 22:14:18 -0000	1.18
+++ gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList.pm	29 Mar 2026 16:31:44 -0000
@@ -4,7 +4,7 @@ use strict;
 our ( %released, %version, %families, %upstream, %bug_tracker, %deprecated, %delta );
 
 use version;
-our $VERSION = '5.20250702';
+our $VERSION = '5.20260329_42';
 
 sub PKG_PATTERN () { q#\A[a-zA-Z_][0-9a-zA-Z_]*(?:(::|')[0-9a-zA-Z_]+)*\z# }
 sub _looks_like_invocant ($) { local $@; !!eval { $_[0]->isa(__PACKAGE__) } }
@@ -442,6 +442,20 @@ sub changes_between {
     5.041012 => '2025-04-21',
     5.041013 => '2025-05-28',
     5.042000 => '2025-07-02',
+    5.043000 => '2025-07-03',
+    5.043001 => '2025-07-20',
+    5.038005 => '2025-08-03',
+    5.040003 => '2025-08-03',
+    5.043002 => '2025-08-20',
+    5.043003 => '2025-09-23',
+    5.043004 => '2025-10-22',
+    5.043005 => '2025-11-20',
+    5.043006 => '2025-12-20',
+    5.043007 => '2026-01-19',
+    5.043008 => '2026-02-20',
+    5.042001 => '2026-03-08',
+    5.043009 => '2026-03-20',
+    5.042002 => '2026-03-29',
   );
 
 for my $version ( sort { $a <=> $b } keys %released ) {
@@ -23448,6 +23462,1180 @@ for my $version ( sort { $a <=> $b } key
         removed => {
         }
     },
+
+    5.043000 => {
+        delta_from => 5.042000,
+        changed => {
+            'B::Op_private'         => '5.043000',
+            'Config'                => '5.043',
+            'Math::BigFloat'        => '2.005003',
+            'Math::BigInt'          => '2.005003',
+            'Math::BigInt::Calc'    => '2.005003',
+            'Math::BigInt::Lib'     => '2.005003',
+            'Math::BigRat'          => '2.005003',
+            'Module::CoreList'      => '5.20250703',
+            'Module::CoreList::Utils'=> '5.20250703',
+            'feature'               => '1.98',
+        },
+        removed => {
+        }
+    },
+    5.043001 => {
+        delta_from => 5.043,
+        changed => {
+            'App::Prove'            => '3.52',
+            'App::Prove::State'     => '3.52',
+            'App::Prove::State::Result'=> '3.52',
+            'App::Prove::State::Result::Test'=> '3.52',
+            'B::Op_private'         => '5.043001',
+            'Config'                => '5.043001',
+            'ExtUtils::ParseXS'     => '3.58',
+            'ExtUtils::ParseXS::Constants'=> '3.58',
+            'ExtUtils::ParseXS::CountLines'=> '3.58',
+            'ExtUtils::ParseXS::Eval'=> '3.58',
+            'ExtUtils::ParseXS::Node'=> '3.58',
+            'ExtUtils::ParseXS::Utilities'=> '3.58',
+            'ExtUtils::Typemaps'    => '3.58',
+            'ExtUtils::Typemaps::Cmd'=> '3.58',
+            'ExtUtils::Typemaps::InputMap'=> '3.58',
+            'ExtUtils::Typemaps::OutputMap'=> '3.58',
+            'ExtUtils::Typemaps::Type'=> '3.58',
+            'File::Fetch'           => '1.08',
+            'Module::CoreList'      => '5.20250720',
+            'Module::CoreList::Utils'=> '5.20250720',
+            'PerlIO::via'           => '0.20',
+            'Pod::Simple'           => '3.47',
+            'Pod::Simple::BlackBox' => '3.47',
+            'Pod::Simple::Checker'  => '3.47',
+            'Pod::Simple::Debug'    => '3.47',
+            'Pod::Simple::DumpAsText'=> '3.47',
+            'Pod::Simple::DumpAsXML'=> '3.47',
+            'Pod::Simple::HTML'     => '3.47',
+            'Pod::Simple::HTMLBatch'=> '3.47',
+            'Pod::Simple::LinkSection'=> '3.47',
+            'Pod::Simple::Methody'  => '3.47',
+            'Pod::Simple::Progress' => '3.47',
+            'Pod::Simple::PullParser'=> '3.47',
+            'Pod::Simple::PullParserEndToken'=> '3.47',
+            'Pod::Simple::PullParserStartToken'=> '3.47',
+            'Pod::Simple::PullParserTextToken'=> '3.47',
+            'Pod::Simple::PullParserToken'=> '3.47',
+            'Pod::Simple::RTF'      => '3.47',
+            'Pod::Simple::Search'   => '3.47',
+            'Pod::Simple::SimpleTree'=> '3.47',
+            'Pod::Simple::Text'     => '3.47',
+            'Pod::Simple::TextContent'=> '3.47',
+            'Pod::Simple::TiedOutFH'=> '3.47',
+            'Pod::Simple::Transcode'=> '3.47',
+            'Pod::Simple::TranscodeDumb'=> '3.47',
+            'Pod::Simple::TranscodeSmart'=> '3.47',
+            'Pod::Simple::XHTML'    => '3.47',
+            'Pod::Simple::XMLOutStream'=> '3.47',
+            'Socket'                => '2.040',
+            'TAP::Base'             => '3.52',
+            'TAP::Formatter::Base'  => '3.52',
+            'TAP::Formatter::Color' => '3.52',
+            'TAP::Formatter::Console'=> '3.52',
+            'TAP::Formatter::Console::ParallelSession'=> '3.52',
+            'TAP::Formatter::Console::Session'=> '3.52',
+            'TAP::Formatter::File'  => '3.52',
+            'TAP::Formatter::File::Session'=> '3.52',
+            'TAP::Formatter::Session'=> '3.52',
+            'TAP::Harness'          => '3.52',
+            'TAP::Harness::Env'     => '3.52',
+            'TAP::Object'           => '3.52',
+            'TAP::Parser'           => '3.52',
+            'TAP::Parser::Aggregator'=> '3.52',
+            'TAP::Parser::Grammar'  => '3.52',
+            'TAP::Parser::Iterator' => '3.52',
+            'TAP::Parser::Iterator::Array'=> '3.52',
+            'TAP::Parser::Iterator::Process'=> '3.52',
+            'TAP::Parser::Iterator::Stream'=> '3.52',
+            'TAP::Parser::IteratorFactory'=> '3.52',
+            'TAP::Parser::Multiplexer'=> '3.52',
+            'TAP::Parser::Result'   => '3.52',
+            'TAP::Parser::Result::Bailout'=> '3.52',
+            'TAP::Parser::Result::Comment'=> '3.52',
+            'TAP::Parser::Result::Plan'=> '3.52',
+            'TAP::Parser::Result::Pragma'=> '3.52',
+            'TAP::Parser::Result::Test'=> '3.52',
+            'TAP::Parser::Result::Unknown'=> '3.52',
+            'TAP::Parser::Result::Version'=> '3.52',
+            'TAP::Parser::Result::YAML'=> '3.52',
+            'TAP::Parser::ResultFactory'=> '3.52',
+            'TAP::Parser::Scheduler'=> '3.52',
+            'TAP::Parser::Scheduler::Job'=> '3.52',
+            'TAP::Parser::Scheduler::Spinner'=> '3.52',
+            'TAP::Parser::Source'   => '3.52',
+            'TAP::Parser::SourceHandler'=> '3.52',
+            'TAP::Parser::SourceHandler::Executable'=> '3.52',
+            'TAP::Parser::SourceHandler::File'=> '3.52',
+            'TAP::Parser::SourceHandler::Handle'=> '3.52',
+            'TAP::Parser::SourceHandler::Perl'=> '3.52',
+            'TAP::Parser::SourceHandler::RawTAP'=> '3.52',
+            'TAP::Parser::YAMLish::Reader'=> '3.52',
+            'TAP::Parser::YAMLish::Writer'=> '3.52',
+            'Test2'                 => '1.302214',
+            'Test2::API'            => '1.302214',
+            'Test2::API::Breakage'  => '1.302214',
+            'Test2::API::Context'   => '1.302214',
+            'Test2::API::Instance'  => '1.302214',
+            'Test2::API::InterceptResult'=> '1.302214',
+            'Test2::API::InterceptResult::Event'=> '1.302214',
+            'Test2::API::InterceptResult::Facet'=> '1.302214',
+            'Test2::API::InterceptResult::Hub'=> '1.302214',
+            'Test2::API::InterceptResult::Squasher'=> '1.302214',
+            'Test2::API::Stack'     => '1.302214',
+            'Test2::AsyncSubtest'   => '1.302214',
+            'Test2::AsyncSubtest::Event::Attach'=> '1.302214',
+            'Test2::AsyncSubtest::Event::Detach'=> '1.302214',
+            'Test2::AsyncSubtest::Formatter'=> '1.302214',
+            'Test2::AsyncSubtest::Hub'=> '1.302214',
+            'Test2::Bundle'         => '1.302214',
+            'Test2::Bundle::Extended'=> '1.302214',
+            'Test2::Bundle::More'   => '1.302214',
+            'Test2::Bundle::Simple' => '1.302214',
+            'Test2::Compare'        => '1.302214',
+            'Test2::Compare::Array' => '1.302214',
+            'Test2::Compare::Bag'   => '1.302214',
+            'Test2::Compare::Base'  => '1.302214',
+            'Test2::Compare::Bool'  => '1.302214',
+            'Test2::Compare::Custom'=> '1.302214',
+            'Test2::Compare::DeepRef'=> '1.302214',
+            'Test2::Compare::Delta' => '1.302214',
+            'Test2::Compare::Event' => '1.302214',
+            'Test2::Compare::EventMeta'=> '1.302214',
+            'Test2::Compare::Float' => '1.302214',
+            'Test2::Compare::Hash'  => '1.302214',
+            'Test2::Compare::Isa'   => '1.302214',
+            'Test2::Compare::Meta'  => '1.302214',
+            'Test2::Compare::Negatable'=> '1.302214',
+            'Test2::Compare::Number'=> '1.302214',
+            'Test2::Compare::Object'=> '1.302214',
+            'Test2::Compare::OrderedSubset'=> '1.302214',
+            'Test2::Compare::Pattern'=> '1.302214',
+            'Test2::Compare::Ref'   => '1.302214',
+            'Test2::Compare::Regex' => '1.302214',
+            'Test2::Compare::Scalar'=> '1.302214',
+            'Test2::Compare::Set'   => '1.302214',
+            'Test2::Compare::String'=> '1.302214',
+            'Test2::Compare::Undef' => '1.302214',
+            'Test2::Compare::Wildcard'=> '1.302214',
+            'Test2::Env'            => '1.302214',
+            'Test2::Event'          => '1.302214',
+            'Test2::Event::Bail'    => '1.302214',
+            'Test2::Event::Diag'    => '1.302214',
+            'Test2::Event::Encoding'=> '1.302214',
+            'Test2::Event::Exception'=> '1.302214',
+            'Test2::Event::Fail'    => '1.302214',
+            'Test2::Event::Generic' => '1.302214',
+            'Test2::Event::Note'    => '1.302214',
+            'Test2::Event::Ok'      => '1.302214',
+            'Test2::Event::Pass'    => '1.302214',
+            'Test2::Event::Plan'    => '1.302214',
+            'Test2::Event::Skip'    => '1.302214',
+            'Test2::Event::Subtest' => '1.302214',
+            'Test2::Event::TAP::Version'=> '1.302214',
+            'Test2::Event::V2'      => '1.302214',
+            'Test2::Event::Waiting' => '1.302214',
+            'Test2::EventFacet'     => '1.302214',
+            'Test2::EventFacet::About'=> '1.302214',
+            'Test2::EventFacet::Amnesty'=> '1.302214',
+            'Test2::EventFacet::Assert'=> '1.302214',
+            'Test2::EventFacet::Control'=> '1.302214',
+            'Test2::EventFacet::Error'=> '1.302214',
+            'Test2::EventFacet::Hub'=> '1.302214',
+            'Test2::EventFacet::Info'=> '1.302214',
+            'Test2::EventFacet::Info::Table'=> '1.302214',
+            'Test2::EventFacet::Meta'=> '1.302214',
+            'Test2::EventFacet::Parent'=> '1.302214',
+            'Test2::EventFacet::Plan'=> '1.302214',
+            'Test2::EventFacet::Render'=> '1.302214',
+            'Test2::EventFacet::Trace'=> '1.302214',
+            'Test2::Formatter'      => '1.302214',
+            'Test2::Formatter::TAP' => '1.302214',
+            'Test2::Hub'            => '1.302214',
+            'Test2::Hub::Interceptor'=> '1.302214',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302214',
+            'Test2::Hub::Subtest'   => '1.302214',
+            'Test2::IPC'            => '1.302214',
+            'Test2::IPC::Driver'    => '1.302214',
+            'Test2::IPC::Driver::Files'=> '1.302214',
+            'Test2::Manual'         => '1.302214',
+            'Test2::Manual::Anatomy'=> '1.302214',
+            'Test2::Manual::Anatomy::API'=> '1.302214',
+            'Test2::Manual::Anatomy::Context'=> '1.302214',
+            'Test2::Manual::Anatomy::EndToEnd'=> '1.302214',
+            'Test2::Manual::Anatomy::Event'=> '1.302214',
+            'Test2::Manual::Anatomy::Hubs'=> '1.302214',
+            'Test2::Manual::Anatomy::IPC'=> '1.302214',
+            'Test2::Manual::Anatomy::Utilities'=> '1.302214',
+            'Test2::Manual::Concurrency'=> '1.302214',
+            'Test2::Manual::Contributing'=> '1.302214',
+            'Test2::Manual::Testing'=> '1.302214',
+            'Test2::Manual::Testing::Introduction'=> '1.302214',
+            'Test2::Manual::Testing::Migrating'=> '1.302214',
+            'Test2::Manual::Testing::Planning'=> '1.302214',
+            'Test2::Manual::Testing::Todo'=> '1.302214',
+            'Test2::Manual::Tooling'=> '1.302214',
+            'Test2::Manual::Tooling::FirstTool'=> '1.302214',
+            'Test2::Manual::Tooling::Formatter'=> '1.302214',
+            'Test2::Manual::Tooling::Nesting'=> '1.302214',
+            'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302214',
+            'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302214',
+            'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302214',
+            'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302214',
+            'Test2::Manual::Tooling::Subtest'=> '1.302214',
+            'Test2::Manual::Tooling::TestBuilder'=> '1.302214',
+            'Test2::Manual::Tooling::Testing'=> '1.302214',
+            'Test2::Mock'           => '1.302214',
+            'Test2::Plugin'         => '1.302214',
+            'Test2::Plugin::BailOnFail'=> '1.302214',
+            'Test2::Plugin::DieOnFail'=> '1.302214',
+            'Test2::Plugin::ExitSummary'=> '1.302214',
+            'Test2::Plugin::SRand'  => '1.302214',
+            'Test2::Plugin::Times'  => '1.302214',
+            'Test2::Plugin::UTF8'   => '1.302214',
+            'Test2::Require'        => '1.302214',
+            'Test2::Require::AuthorTesting'=> '1.302214',
+            'Test2::Require::AutomatedTesting'=> '1.302214',
+            'Test2::Require::EnvVar'=> '1.302214',
+            'Test2::Require::ExtendedTesting'=> '1.302214',
+            'Test2::Require::Fork'  => '1.302214',
+            'Test2::Require::Module'=> '1.302214',
+            'Test2::Require::NonInteractiveTesting'=> '1.302214',
+            'Test2::Require::Perl'  => '1.302214',
+            'Test2::Require::RealFork'=> '1.302214',
+            'Test2::Require::ReleaseTesting'=> '1.302214',
+            'Test2::Require::Threads'=> '1.302214',
+            'Test2::Suite'          => '1.302214',
+            'Test2::Todo'           => '1.302214',
+            'Test2::Tools'          => '1.302214',
+            'Test2::Tools::AsyncSubtest'=> '1.302214',
+            'Test2::Tools::Basic'   => '1.302214',
+            'Test2::Tools::Class'   => '1.302214',
+            'Test2::Tools::ClassicCompare'=> '1.302214',
+            'Test2::Tools::Compare' => '1.302214',
+            'Test2::Tools::Defer'   => '1.302214',
+            'Test2::Tools::Encoding'=> '1.302214',
+            'Test2::Tools::Event'   => '1.302214',
+            'Test2::Tools::Exception'=> '1.302214',
+            'Test2::Tools::Exports' => '1.302214',
+            'Test2::Tools::GenTemp' => '1.302214',
+            'Test2::Tools::Grab'    => '1.302214',
+            'Test2::Tools::Mock'    => '1.302214',
+            'Test2::Tools::Ref'     => '1.302214',
+            'Test2::Tools::Refcount'=> '1.302214',
+            'Test2::Tools::Spec'    => '1.302214',
+            'Test2::Tools::Subtest' => '1.302214',
+            'Test2::Tools::Target'  => '1.302214',
+            'Test2::Tools::Tester'  => '1.302214',
+            'Test2::Tools::Tiny'    => '1.302214',
+            'Test2::Tools::Warnings'=> '1.302214',
+            'Test2::Util'           => '1.302214',
+            'Test2::Util::ExternalMeta'=> '1.302214',
+            'Test2::Util::Facets2Legacy'=> '1.302214',
+            'Test2::Util::Grabber'  => '1.302214',
+            'Test2::Util::Guard'    => '1.302214',
+            'Test2::Util::HashBase' => '1.302214',
+            'Test2::Util::Importer' => '1.302214',
+            'Test2::Util::Ref'      => '1.302214',
+            'Test2::Util::Sig'      => '1.302214',
+            'Test2::Util::Stash'    => '1.302214',
+            'Test2::Util::Sub'      => '1.302214',
+            'Test2::Util::Table'    => '1.302214',
+            'Test2::Util::Table::Cell'=> '1.302214',
+            'Test2::Util::Table::LineBreak'=> '1.302214',
+            'Test2::Util::Term'     => '1.302214',
+            'Test2::Util::Times'    => '1.302214',
+            'Test2::Util::Trace'    => '1.302214',
+            'Test2::V0'             => '1.302214',
+            'Test2::Workflow'       => '1.302214',
+            'Test2::Workflow::BlockBase'=> '1.302214',
+            'Test2::Workflow::Build'=> '1.302214',
+            'Test2::Workflow::Runner'=> '1.302214',
+            'Test2::Workflow::Task' => '1.302214',
+            'Test2::Workflow::Task::Action'=> '1.302214',
+            'Test2::Workflow::Task::Group'=> '1.302214',
+            'Test::Builder'         => '1.302214',
+            'Test::Builder::Formatter'=> '1.302214',
+            'Test::Builder::Module' => '1.302214',
+            'Test::Builder::Tester' => '1.302214',
+            'Test::Builder::Tester::Color'=> '1.302214',
+            'Test::Builder::TodoDiag'=> '1.302214',
+            'Test::Harness'         => '3.52',
+            'Test::More'            => '1.302214',
+            'Test::Simple'          => '1.302214',
+            'Test::Tester'          => '1.302214',
+            'Test::Tester::Capture' => '1.302214',
+            'Test::Tester::CaptureRunner'=> '1.302214',
+            'Test::Tester::Delegate'=> '1.302214',
+            'Test::use::ok'         => '1.302214',
+            'Unicode::UCD'          => '0.82',
+            'experimental'          => '0.036',
+            'ok'                    => '1.302214',
+            'stable'                => '0.036',
+        },
+        removed => {
+        }
+    },
+    5.038005 => {
+        delta_from => 5.038004,
+        changed => {
+            'B::Op_private'         => '5.038005',
+            'Config'                => '5.038005',
+            'Module::CoreList'      => '5.20250803_38',
+            'Module::CoreList::Utils'=> '5.20250803_38',
+        },
+        removed => {
+        }
+    },
+    5.040003 => {
+        delta_from => 5.040002,
+        changed => {
+            'B::Op_private'         => '5.040003',
+            'Config'                => '5.040003',
+            'Module::CoreList'      => '5.20250803_40',
+            'Module::CoreList::Utils'=> '5.20250803_40',
+        },
+        removed => {
+        }
+    },
+    5.043002 => {
+        delta_from => 5.043001,
+        changed => {
+            'B::Deparse'            => '1.86',
+            'B::Op_private'         => '5.043002',
+            'Config'                => '5.043002',
+            'ExtUtils::Miniperl'    => '1.15',
+            'ExtUtils::ParseXS'     => '3.59',
+            'ExtUtils::ParseXS::Constants'=> '3.59',
+            'ExtUtils::ParseXS::CountLines'=> '3.59',
+            'ExtUtils::ParseXS::Eval'=> '3.59',
+            'ExtUtils::ParseXS::Node'=> '3.59',
+            'ExtUtils::ParseXS::Utilities'=> '3.59',
+            'ExtUtils::Typemaps'    => '3.59',
+            'ExtUtils::Typemaps::Cmd'=> '3.59',
+            'ExtUtils::Typemaps::InputMap'=> '3.59',
+            'ExtUtils::Typemaps::OutputMap'=> '3.59',
+            'ExtUtils::Typemaps::Type'=> '3.59',
+            'File::Copy'            => '2.42',
+            'File::stat'            => '1.15',
+            'Filter::Simple'        => '0.97',
+            'List::Util'            => '1.70',
+            'List::Util::XS'        => '1.70',
+            'Module::CoreList'      => '5.20250820',
+            'Module::CoreList::Utils'=> '5.20250820',
+            'POSIX'                 => '2.24',
+            'Scalar::List::Utils'   => '1.70',
+            'Scalar::Util'          => '1.70',
+            'Storable'              => '3.38',
+            'Sub::Util'             => '1.70',
+            'Text::Balanced'        => '2.07',
+            'Unicode::UCD'          => '0.83',
+            'XS::APItest'           => '1.44',
+            'feature'               => '1.99',
+            'mro'                   => '1.30',
+            'threads::shared'       => '1.71',
+        },
+        removed => {
+        }
+    },
+    5.043003 => {
+        delta_from => 5.043002,
+        changed => {
+            'B'                     => '1.90',
+            'B::Concise'            => '1.009',
+            'B::Deparse'            => '1.87',
+            'B::Op_private'         => '5.043003',
+            'Config'                => '5.043003',
+            'ExtUtils::ParseXS'     => '3.60',
+            'ExtUtils::ParseXS::Constants'=> '3.60',
+            'ExtUtils::ParseXS::CountLines'=> '3.60',
+            'ExtUtils::ParseXS::Eval'=> '3.60',
+            'ExtUtils::ParseXS::Node'=> '3.60',
+            'ExtUtils::ParseXS::Utilities'=> '3.60',
+            'ExtUtils::Typemaps'    => '3.60',
+            'ExtUtils::Typemaps::Cmd'=> '3.60',
+            'ExtUtils::Typemaps::InputMap'=> '3.60',
+            'ExtUtils::Typemaps::OutputMap'=> '3.60',
+            'ExtUtils::Typemaps::Type'=> '3.60',
+            'File::Copy'            => '2.43',
+            'File::Temp'            => '0.2312',
+            'Filter::Util::Call'    => '1.65',
+            'Module::CoreList'      => '5.20250923',
+            'Module::CoreList::Utils'=> '5.20250923',
+            'Net::Ping'             => '2.77',
+            'Opcode'                => '1.70',
+            'PerlIO::via'           => '0.21',
+            'Storable'              => '3.39',
+            'Term::Table'           => '0.025',
+            'Term::Table::Cell'     => '0.025',
+            'Term::Table::CellStack'=> '0.025',
+            'Term::Table::HashBase' => '0.025',
+            'Term::Table::LineBreak'=> '0.025',
+            'Term::Table::Spacer'   => '0.025',
+            'Term::Table::Util'     => '0.025',
+            'Time::HiRes'           => '1.9779',
+            'Time::Piece'           => '1.3701',
+            'Time::Seconds'         => '1.3701',
+            'Unicode'               => '17.0.0',
+            'XS::APItest'           => '1.46',
+            'overloading'           => '0.03',
+            'utf8'                  => '1.29',
+        },
+        removed => {
+        }
+    },
+    5.043004 => {
+        delta_from => 5.043003,
+        changed => {
+            'B::Deparse'            => '1.88',
+            'B::Op_private'         => '5.043004',
+            'Config'                => '5.043004',
+            'Module::CoreList'      => '5.20251022',
+            'Module::CoreList::Utils'=> '5.20251022',
+            'SelectSaver'           => '1.03',
+            'Time::Piece'           => '1.38',
+            'Time::Seconds'         => '1.38',
+            'XS::APItest'           => '1.47',
+            'attributes'            => '0.37',
+            'feature'               => '2.00',
+        },
+        removed => {
+        }
+    },
+    5.043005 => {
+        delta_from => 5.043004,
+        changed => {
+            'B::Op_private'         => '5.043005',
+            'Compress::Raw::Bzip2'  => '2.214',
+            'Compress::Raw::Zlib'   => '2.214',
+            'Compress::Zlib'        => '2.214',
+            'Config'                => '5.043005',
+            'Getopt::Std'           => '1.15',
+            'IO::Compress'          => '2.214',
+            'IO::Compress::Adapter::Bzip2'=> '2.214',
+            'IO::Compress::Adapter::Deflate'=> '2.214',
+            'IO::Compress::Adapter::Identity'=> '2.214',
+            'IO::Compress::Base'    => '2.214',
+            'IO::Compress::Base::Common'=> '2.214',
+            'IO::Compress::Bzip2'   => '2.214',
+            'IO::Compress::Deflate' => '2.214',
+            'IO::Compress::Gzip'    => '2.214',
+            'IO::Compress::Gzip::Constants'=> '2.214',
+            'IO::Compress::RawDeflate'=> '2.214',
+            'IO::Compress::Zip'     => '2.214',
+            'IO::Compress::Zip::Constants'=> '2.214',
+            'IO::Compress::Zlib::Constants'=> '2.214',
+            'IO::Compress::Zlib::Extra'=> '2.214',
+            'IO::Uncompress::Adapter::Bunzip2'=> '2.214',
+            'IO::Uncompress::Adapter::Identity'=> '2.214',
+            'IO::Uncompress::Adapter::Inflate'=> '2.214',
+            'IO::Uncompress::AnyInflate'=> '2.214',
+            'IO::Uncompress::AnyUncompress'=> '2.214',
+            'IO::Uncompress::Base'  => '2.214',
+            'IO::Uncompress::Bunzip2'=> '2.214',
+            'IO::Uncompress::Gunzip'=> '2.214',
+            'IO::Uncompress::Inflate'=> '2.214',
+            'IO::Uncompress::RawInflate'=> '2.214',
+            'IO::Uncompress::Unzip' => '2.214',
+            'Module::CoreList'      => '5.20251120',
+            'Module::CoreList::Utils'=> '5.20251120',
+            'Term::Table'           => '0.027',
+            'Term::Table::Cell'     => '0.027',
+            'Term::Table::CellStack'=> '0.027',
+            'Term::Table::HashBase' => '0.027',
+            'Term::Table::LineBreak'=> '0.027',
+            'Term::Table::Spacer'   => '0.027',
+            'Term::Table::Util'     => '0.027',
+            'Test2'                 => '1.302216',
+            'Test2::API'            => '1.302216',
+            'Test2::API::Breakage'  => '1.302216',
+            'Test2::API::Context'   => '1.302216',
+            'Test2::API::Instance'  => '1.302216',
+            'Test2::API::InterceptResult'=> '1.302216',
+            'Test2::API::InterceptResult::Event'=> '1.302216',
+            'Test2::API::InterceptResult::Facet'=> '1.302216',
+            'Test2::API::InterceptResult::Hub'=> '1.302216',
+            'Test2::API::InterceptResult::Squasher'=> '1.302216',
+            'Test2::API::Stack'     => '1.302216',
+            'Test2::AsyncSubtest'   => '1.302216',
+            'Test2::AsyncSubtest::Event::Attach'=> '1.302216',
+            'Test2::AsyncSubtest::Event::Detach'=> '1.302216',
+            'Test2::AsyncSubtest::Formatter'=> '1.302216',
+            'Test2::AsyncSubtest::Hub'=> '1.302216',
+            'Test2::Bundle'         => '1.302216',
+            'Test2::Bundle::Extended'=> '1.302216',
+            'Test2::Bundle::More'   => '1.302216',
+            'Test2::Bundle::Simple' => '1.302216',
+            'Test2::Compare'        => '1.302216',
+            'Test2::Compare::Array' => '1.302216',
+            'Test2::Compare::Bag'   => '1.302216',
+            'Test2::Compare::Base'  => '1.302216',
+            'Test2::Compare::Bool'  => '1.302216',
+            'Test2::Compare::Custom'=> '1.302216',
+            'Test2::Compare::DeepRef'=> '1.302216',
+            'Test2::Compare::Delta' => '1.302216',
+            'Test2::Compare::Event' => '1.302216',
+            'Test2::Compare::EventMeta'=> '1.302216',
+            'Test2::Compare::Float' => '1.302216',
+            'Test2::Compare::Hash'  => '1.302216',
+            'Test2::Compare::Isa'   => '1.302216',
+            'Test2::Compare::Meta'  => '1.302216',
+            'Test2::Compare::Negatable'=> '1.302216',
+            'Test2::Compare::Number'=> '1.302216',
+            'Test2::Compare::Object'=> '1.302216',
+            'Test2::Compare::OrderedSubset'=> '1.302216',
+            'Test2::Compare::Pattern'=> '1.302216',
+            'Test2::Compare::Ref'   => '1.302216',
+            'Test2::Compare::Regex' => '1.302216',
+            'Test2::Compare::Scalar'=> '1.302216',
+            'Test2::Compare::Set'   => '1.302216',
+            'Test2::Compare::String'=> '1.302216',
+            'Test2::Compare::Undef' => '1.302216',
+            'Test2::Compare::Wildcard'=> '1.302216',
+            'Test2::Env'            => '1.302216',
+            'Test2::Event'          => '1.302216',
+            'Test2::Event::Bail'    => '1.302216',
+            'Test2::Event::Diag'    => '1.302216',
+            'Test2::Event::Encoding'=> '1.302216',
+            'Test2::Event::Exception'=> '1.302216',
+            'Test2::Event::Fail'    => '1.302216',
+            'Test2::Event::Generic' => '1.302216',
+            'Test2::Event::Note'    => '1.302216',
+            'Test2::Event::Ok'      => '1.302216',
+            'Test2::Event::Pass'    => '1.302216',
+            'Test2::Event::Plan'    => '1.302216',
+            'Test2::Event::Skip'    => '1.302216',
+            'Test2::Event::Subtest' => '1.302216',
+            'Test2::Event::TAP::Version'=> '1.302216',
+            'Test2::Event::V2'      => '1.302216',
+            'Test2::Event::Waiting' => '1.302216',
+            'Test2::EventFacet'     => '1.302216',
+            'Test2::EventFacet::About'=> '1.302216',
+            'Test2::EventFacet::Amnesty'=> '1.302216',
+            'Test2::EventFacet::Assert'=> '1.302216',
+            'Test2::EventFacet::Control'=> '1.302216',
+            'Test2::EventFacet::Error'=> '1.302216',
+            'Test2::EventFacet::Hub'=> '1.302216',
+            'Test2::EventFacet::Info'=> '1.302216',
+            'Test2::EventFacet::Info::Table'=> '1.302216',
+            'Test2::EventFacet::Meta'=> '1.302216',
+            'Test2::EventFacet::Parent'=> '1.302216',
+            'Test2::EventFacet::Plan'=> '1.302216',
+            'Test2::EventFacet::Render'=> '1.302216',
+            'Test2::EventFacet::Trace'=> '1.302216',
+            'Test2::Formatter'      => '1.302216',
+            'Test2::Formatter::TAP' => '1.302216',
+            'Test2::Hub'            => '1.302216',
+            'Test2::Hub::Interceptor'=> '1.302216',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302216',
+            'Test2::Hub::Subtest'   => '1.302216',
+            'Test2::IPC'            => '1.302216',
+            'Test2::IPC::Driver'    => '1.302216',
+            'Test2::IPC::Driver::Files'=> '1.302216',
+            'Test2::Manual'         => '1.302216',
+            'Test2::Manual::Anatomy'=> '1.302216',
+            'Test2::Manual::Anatomy::API'=> '1.302216',
+            'Test2::Manual::Anatomy::Context'=> '1.302216',
+            'Test2::Manual::Anatomy::EndToEnd'=> '1.302216',
+            'Test2::Manual::Anatomy::Event'=> '1.302216',
+            'Test2::Manual::Anatomy::Hubs'=> '1.302216',
+            'Test2::Manual::Anatomy::IPC'=> '1.302216',
+            'Test2::Manual::Anatomy::Utilities'=> '1.302216',
+            'Test2::Manual::Concurrency'=> '1.302216',
+            'Test2::Manual::Contributing'=> '1.302216',
+            'Test2::Manual::Testing'=> '1.302216',
+            'Test2::Manual::Testing::Introduction'=> '1.302216',
+            'Test2::Manual::Testing::Migrating'=> '1.302216',
+            'Test2::Manual::Testing::Planning'=> '1.302216',
+            'Test2::Manual::Testing::Todo'=> '1.302216',
+            'Test2::Manual::Tooling'=> '1.302216',
+            'Test2::Manual::Tooling::FirstTool'=> '1.302216',
+            'Test2::Manual::Tooling::Formatter'=> '1.302216',
+            'Test2::Manual::Tooling::Nesting'=> '1.302216',
+            'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302216',
+            'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302216',
+            'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302216',
+            'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302216',
+            'Test2::Manual::Tooling::Subtest'=> '1.302216',
+            'Test2::Manual::Tooling::TestBuilder'=> '1.302216',
+            'Test2::Manual::Tooling::Testing'=> '1.302216',
+            'Test2::Mock'           => '1.302216',
+            'Test2::Plugin'         => '1.302216',
+            'Test2::Plugin::BailOnFail'=> '1.302216',
+            'Test2::Plugin::DieOnFail'=> '1.302216',
+            'Test2::Plugin::ExitSummary'=> '1.302216',
+            'Test2::Plugin::SRand'  => '1.302216',
+            'Test2::Plugin::Times'  => '1.302216',
+            'Test2::Plugin::UTF8'   => '1.302216',
+            'Test2::Require'        => '1.302216',
+            'Test2::Require::AuthorTesting'=> '1.302216',
+            'Test2::Require::AutomatedTesting'=> '1.302216',
+            'Test2::Require::EnvVar'=> '1.302216',
+            'Test2::Require::ExtendedTesting'=> '1.302216',
+            'Test2::Require::Fork'  => '1.302216',
+            'Test2::Require::Module'=> '1.302216',
+            'Test2::Require::NonInteractiveTesting'=> '1.302216',
+            'Test2::Require::Perl'  => '1.302216',
+            'Test2::Require::RealFork'=> '1.302216',
+            'Test2::Require::ReleaseTesting'=> '1.302216',
+            'Test2::Require::Threads'=> '1.302216',
+            'Test2::Suite'          => '1.302216',
+            'Test2::Todo'           => '1.302216',
+            'Test2::Tools'          => '1.302216',
+            'Test2::Tools::AsyncSubtest'=> '1.302216',
+            'Test2::Tools::Basic'   => '1.302216',
+            'Test2::Tools::Class'   => '1.302216',
+            'Test2::Tools::ClassicCompare'=> '1.302216',
+            'Test2::Tools::Compare' => '1.302216',
+            'Test2::Tools::Defer'   => '1.302216',
+            'Test2::Tools::Encoding'=> '1.302216',
+            'Test2::Tools::Event'   => '1.302216',
+            'Test2::Tools::Exception'=> '1.302216',
+            'Test2::Tools::Exports' => '1.302216',
+            'Test2::Tools::GenTemp' => '1.302216',
+            'Test2::Tools::Grab'    => '1.302216',
+            'Test2::Tools::Mock'    => '1.302216',
+            'Test2::Tools::Ref'     => '1.302216',
+            'Test2::Tools::Refcount'=> '1.302216',
+            'Test2::Tools::Spec'    => '1.302216',
+            'Test2::Tools::Subtest' => '1.302216',
+            'Test2::Tools::Target'  => '1.302216',
+            'Test2::Tools::Tester'  => '1.302216',
+            'Test2::Tools::Tiny'    => '1.302216',
+            'Test2::Tools::Warnings'=> '1.302216',
+            'Test2::Util'           => '1.302216',
+            'Test2::Util::ExternalMeta'=> '1.302216',
+            'Test2::Util::Facets2Legacy'=> '1.302216',
+            'Test2::Util::Grabber'  => '1.302216',
+            'Test2::Util::Guard'    => '1.302216',
+            'Test2::Util::HashBase' => '1.302216',
+            'Test2::Util::Importer' => '1.302216',
+            'Test2::Util::Ref'      => '1.302216',
+            'Test2::Util::Sig'      => '1.302216',
+            'Test2::Util::Stash'    => '1.302216',
+            'Test2::Util::Sub'      => '1.302216',
+            'Test2::Util::Table'    => '1.302216',
+            'Test2::Util::Table::Cell'=> '1.302216',
+            'Test2::Util::Table::LineBreak'=> '1.302216',
+            'Test2::Util::Term'     => '1.302216',
+            'Test2::Util::Times'    => '1.302216',
+            'Test2::Util::Trace'    => '1.302216',
+            'Test2::V0'             => '1.302216',
+            'Test2::Workflow'       => '1.302216',
+            'Test2::Workflow::BlockBase'=> '1.302216',
+            'Test2::Workflow::Build'=> '1.302216',
+            'Test2::Workflow::Runner'=> '1.302216',
+            'Test2::Workflow::Task' => '1.302216',
+            'Test2::Workflow::Task::Action'=> '1.302216',
+            'Test2::Workflow::Task::Group'=> '1.302216',
+            'Test::Builder'         => '1.302216',
+            'Test::Builder::Formatter'=> '1.302216',
+            'Test::Builder::Module' => '1.302216',
+            'Test::Builder::Tester' => '1.302216',
+            'Test::Builder::Tester::Color'=> '1.302216',
+            'Test::Builder::TodoDiag'=> '1.302216',
+            'Test::More'            => '1.302216',
+            'Test::Simple'          => '1.302216',
+            'Test::Tester'          => '1.302216',
+            'Test::Tester::Capture' => '1.302216',
+            'Test::Tester::CaptureRunner'=> '1.302216',
+            'Test::Tester::Delegate'=> '1.302216',
+            'Test::use::ok'         => '1.302216',
+            'Time::Piece'           => '1.41',
+            'Time::Seconds'         => '1.41',
+            'ok'                    => '1.302216',
+            'warnings'              => '1.75',
+        },
+        removed => {
+        }
+    },
+    5.043006 => {
+        delta_from => 5.043005,
+        changed => {
+            'B::Op_private'         => '5.043006',
+            'Config'                => '5.043006',
+            'ExtUtils::ParseXS'     => '3.61',
+            'ExtUtils::ParseXS::Constants'=> '3.61',
+            'ExtUtils::ParseXS::CountLines'=> '3.61',
+            'ExtUtils::ParseXS::Eval'=> '3.61',
+            'ExtUtils::ParseXS::Node'=> '3.61',
+            'ExtUtils::ParseXS::Utilities'=> '3.61',
+            'ExtUtils::Typemaps'    => '3.61',
+            'ExtUtils::Typemaps::Cmd'=> '3.61',
+            'ExtUtils::Typemaps::InputMap'=> '3.61',
+            'ExtUtils::Typemaps::OutputMap'=> '3.61',
+            'ExtUtils::Typemaps::Type'=> '3.61',
+            'Module::CoreList'      => '5.20251220',
+            'Module::CoreList::Utils'=> '5.20251220',
+            'Term::Table'           => '0.028',
+            'Term::Table::Cell'     => '0.028',
+            'Term::Table::CellStack'=> '0.028',
+            'Term::Table::HashBase' => '0.028',
+            'Term::Table::LineBreak'=> '0.028',
+            'Term::Table::Spacer'   => '0.028',
+            'Term::Table::Util'     => '0.028',
+            'Test2'                 => '1.302219',
+            'Test2::API'            => '1.302219',
+            'Test2::API::Breakage'  => '1.302219',
+            'Test2::API::Context'   => '1.302219',
+            'Test2::API::Instance'  => '1.302219',
+            'Test2::API::InterceptResult'=> '1.302219',
+            'Test2::API::InterceptResult::Event'=> '1.302219',
+            'Test2::API::InterceptResult::Facet'=> '1.302219',
+            'Test2::API::InterceptResult::Hub'=> '1.302219',
+            'Test2::API::InterceptResult::Squasher'=> '1.302219',
+            'Test2::API::Stack'     => '1.302219',
+            'Test2::AsyncSubtest'   => '1.302219',
+            'Test2::AsyncSubtest::Event::Attach'=> '1.302219',
+            'Test2::AsyncSubtest::Event::Detach'=> '1.302219',
+            'Test2::AsyncSubtest::Formatter'=> '1.302219',
+            'Test2::AsyncSubtest::Hub'=> '1.302219',
+            'Test2::Bundle'         => '1.302219',
+            'Test2::Bundle::Extended'=> '1.302219',
+            'Test2::Bundle::More'   => '1.302219',
+            'Test2::Bundle::Simple' => '1.302219',
+            'Test2::Compare'        => '1.302219',
+            'Test2::Compare::Array' => '1.302219',
+            'Test2::Compare::Bag'   => '1.302219',
+            'Test2::Compare::Base'  => '1.302219',
+            'Test2::Compare::Bool'  => '1.302219',
+            'Test2::Compare::Custom'=> '1.302219',
+            'Test2::Compare::DeepRef'=> '1.302219',
+            'Test2::Compare::Delta' => '1.302219',
+            'Test2::Compare::Event' => '1.302219',
+            'Test2::Compare::EventMeta'=> '1.302219',
+            'Test2::Compare::Float' => '1.302219',
+            'Test2::Compare::Hash'  => '1.302219',
+            'Test2::Compare::Isa'   => '1.302219',
+            'Test2::Compare::Meta'  => '1.302219',
+            'Test2::Compare::Negatable'=> '1.302219',
+            'Test2::Compare::Number'=> '1.302219',
+            'Test2::Compare::Object'=> '1.302219',
+            'Test2::Compare::OrderedSubset'=> '1.302219',
+            'Test2::Compare::Pattern'=> '1.302219',
+            'Test2::Compare::Ref'   => '1.302219',
+            'Test2::Compare::Regex' => '1.302219',
+            'Test2::Compare::Scalar'=> '1.302219',
+            'Test2::Compare::Set'   => '1.302219',
+            'Test2::Compare::String'=> '1.302219',
+            'Test2::Compare::Undef' => '1.302219',
+            'Test2::Compare::Wildcard'=> '1.302219',
+            'Test2::Env'            => '1.302219',
+            'Test2::Event'          => '1.302219',
+            'Test2::Event::Bail'    => '1.302219',
+            'Test2::Event::Diag'    => '1.302219',
+            'Test2::Event::Encoding'=> '1.302219',
+            'Test2::Event::Exception'=> '1.302219',
+            'Test2::Event::Fail'    => '1.302219',
+            'Test2::Event::Generic' => '1.302219',
+            'Test2::Event::Note'    => '1.302219',
+            'Test2::Event::Ok'      => '1.302219',
+            'Test2::Event::Pass'    => '1.302219',
+            'Test2::Event::Plan'    => '1.302219',
+            'Test2::Event::Skip'    => '1.302219',
+            'Test2::Event::Subtest' => '1.302219',
+            'Test2::Event::TAP::Version'=> '1.302219',
+            'Test2::Event::V2'      => '1.302219',
+            'Test2::Event::Waiting' => '1.302219',
+            'Test2::EventFacet'     => '1.302219',
+            'Test2::EventFacet::About'=> '1.302219',
+            'Test2::EventFacet::Amnesty'=> '1.302219',
+            'Test2::EventFacet::Assert'=> '1.302219',
+            'Test2::EventFacet::Control'=> '1.302219',
+            'Test2::EventFacet::Error'=> '1.302219',
+            'Test2::EventFacet::Hub'=> '1.302219',
+            'Test2::EventFacet::Info'=> '1.302219',
+            'Test2::EventFacet::Info::Table'=> '1.302219',
+            'Test2::EventFacet::Meta'=> '1.302219',
+            'Test2::EventFacet::Parent'=> '1.302219',
+            'Test2::EventFacet::Plan'=> '1.302219',
+            'Test2::EventFacet::Render'=> '1.302219',
+            'Test2::EventFacet::Trace'=> '1.302219',
+            'Test2::Formatter'      => '1.302219',
+            'Test2::Formatter::TAP' => '1.302219',
+            'Test2::Handle'         => '1.302219',
+            'Test2::Hub'            => '1.302219',
+            'Test2::Hub::Interceptor'=> '1.302219',
+            'Test2::Hub::Interceptor::Terminator'=> '1.302219',
+            'Test2::Hub::Subtest'   => '1.302219',
+            'Test2::IPC'            => '1.302219',
+            'Test2::IPC::Driver'    => '1.302219',
+            'Test2::IPC::Driver::Files'=> '1.302219',
+            'Test2::Manual'         => '1.302219',
+            'Test2::Manual::Anatomy'=> '1.302219',
+            'Test2::Manual::Anatomy::API'=> '1.302219',
+            'Test2::Manual::Anatomy::Context'=> '1.302219',
+            'Test2::Manual::Anatomy::EndToEnd'=> '1.302219',
+            'Test2::Manual::Anatomy::Event'=> '1.302219',
+            'Test2::Manual::Anatomy::Hubs'=> '1.302219',
+            'Test2::Manual::Anatomy::IPC'=> '1.302219',
+            'Test2::Manual::Anatomy::Utilities'=> '1.302219',
+            'Test2::Manual::Concurrency'=> '1.302219',
+            'Test2::Manual::Contributing'=> '1.302219',
+            'Test2::Manual::Testing'=> '1.302219',
+            'Test2::Manual::Testing::Introduction'=> '1.302219',
+            'Test2::Manual::Testing::Migrating'=> '1.302219',
+            'Test2::Manual::Testing::Planning'=> '1.302219',
+            'Test2::Manual::Testing::Todo'=> '1.302219',
+            'Test2::Manual::Tooling'=> '1.302219',
+            'Test2::Manual::Tooling::FirstTool'=> '1.302219',
+            'Test2::Manual::Tooling::Formatter'=> '1.302219',
+            'Test2::Manual::Tooling::Nesting'=> '1.302219',
+            'Test2::Manual::Tooling::Plugin::TestExit'=> '1.302219',
+            'Test2::Manual::Tooling::Plugin::TestingDone'=> '1.302219',
+            'Test2::Manual::Tooling::Plugin::ToolCompletes'=> '1.302219',
+            'Test2::Manual::Tooling::Plugin::ToolStarts'=> '1.302219',
+            'Test2::Manual::Tooling::Subtest'=> '1.302219',
+            'Test2::Manual::Tooling::TestBuilder'=> '1.302219',
+            'Test2::Manual::Tooling::Testing'=> '1.302219',
+            'Test2::Mock'           => '1.302219',
+            'Test2::Plugin'         => '1.302219',
+            'Test2::Plugin::BailOnFail'=> '1.302219',
+            'Test2::Plugin::DieOnFail'=> '1.302219',
+            'Test2::Plugin::ExitSummary'=> '1.302219',
+            'Test2::Plugin::SRand'  => '1.302219',
+            'Test2::Plugin::Times'  => '1.302219',
+            'Test2::Plugin::UTF8'   => '1.302219',
+            'Test2::Require'        => '1.302219',
+            'Test2::Require::AuthorTesting'=> '1.302219',
+            'Test2::Require::AutomatedTesting'=> '1.302219',
+            'Test2::Require::EnvVar'=> '1.302219',
+            'Test2::Require::ExtendedTesting'=> '1.302219',
+            'Test2::Require::Fork'  => '1.302219',
+            'Test2::Require::Module'=> '1.302219',
+            'Test2::Require::NonInteractiveTesting'=> '1.302219',
+            'Test2::Require::Perl'  => '1.302219',
+            'Test2::Require::RealFork'=> '1.302219',
+            'Test2::Require::ReleaseTesting'=> '1.302219',
+            'Test2::Require::Threads'=> '1.302219',
+            'Test2::Suite'          => '1.302219',
+            'Test2::Todo'           => '1.302219',
+            'Test2::Tools'          => '1.302219',
+            'Test2::Tools::AsyncSubtest'=> '1.302219',
+            'Test2::Tools::Basic'   => '1.302219',
+            'Test2::Tools::Class'   => '1.302219',
+            'Test2::Tools::ClassicCompare'=> '1.302219',
+            'Test2::Tools::Compare' => '1.302219',
+            'Test2::Tools::Defer'   => '1.302219',
+            'Test2::Tools::Encoding'=> '1.302219',
+            'Test2::Tools::Event'   => '1.302219',
+            'Test2::Tools::Exception'=> '1.302219',
+            'Test2::Tools::Exports' => '1.302219',
+            'Test2::Tools::GenTemp' => '1.302219',
+            'Test2::Tools::Grab'    => '1.302219',
+            'Test2::Tools::Mock'    => '1.302219',
+            'Test2::Tools::Ref'     => '1.302219',
+            'Test2::Tools::Refcount'=> '1.302219',
+            'Test2::Tools::Spec'    => '1.302219',
+            'Test2::Tools::Subtest' => '1.302219',
+            'Test2::Tools::Target'  => '1.302219',
+            'Test2::Tools::Tester'  => '1.302219',
+            'Test2::Tools::Tiny'    => '1.302219',
+            'Test2::Tools::Warnings'=> '1.302219',
+            'Test2::Util'           => '1.302219',
+            'Test2::Util::ExternalMeta'=> '1.302219',
+            'Test2::Util::Facets2Legacy'=> '1.302219',
+            'Test2::Util::Grabber'  => '1.302219',
+            'Test2::Util::Guard'    => '1.302219',
+            'Test2::Util::HashBase' => '1.302219',
+            'Test2::Util::Importer' => '1.302219',
+            'Test2::Util::Ref'      => '1.302219',
+            'Test2::Util::Sig'      => '1.302219',
+            'Test2::Util::Stash'    => '1.302219',
+            'Test2::Util::Sub'      => '1.302219',
+            'Test2::Util::Table'    => '1.302219',
+            'Test2::Util::Table::Cell'=> '1.302219',
+            'Test2::Util::Table::LineBreak'=> '1.302219',
+            'Test2::Util::Term'     => '1.302219',
+            'Test2::Util::Times'    => '1.302219',
+            'Test2::Util::Trace'    => '1.302219',
+            'Test2::V0'             => '1.302219',
+            'Test2::V1'             => '1.302219',
+            'Test2::V1::Base'       => '1.302219',
+            'Test2::V1::Handle'     => '1.302219',
+            'Test2::Workflow'       => '1.302219',
+            'Test2::Workflow::BlockBase'=> '1.302219',
+            'Test2::Workflow::Build'=> '1.302219',
+            'Test2::Workflow::Runner'=> '1.302219',
+            'Test2::Workflow::Task' => '1.302219',
+            'Test2::Workflow::Task::Action'=> '1.302219',
+            'Test2::Workflow::Task::Group'=> '1.302219',
+            'Test::Builder'         => '1.302219',
+            'Test::Builder::Formatter'=> '1.302219',
+            'Test::Builder::Module' => '1.302219',
+            'Test::Builder::Tester' => '1.302219',
+            'Test::Builder::Tester::Color'=> '1.302219',
+            'Test::Builder::TodoDiag'=> '1.302219',
+            'Test::More'            => '1.302219',
+            'Test::Simple'          => '1.302219',
+            'Test::Tester'          => '1.302219',
+            'Test::Tester::Capture' => '1.302219',
+            'Test::Tester::CaptureRunner'=> '1.302219',
+            'Test::Tester::Delegate'=> '1.302219',
+            'Test::use::ok'         => '1.302219',
+            'XS::APItest'           => '1.48',
+            '_charnames'            => '1.51',
+            'charnames'             => '1.51',
+            'ok'                    => '1.302219',
+            'warnings'              => '1.76',
+        },
+        removed => {
+        }
+    },
+    5.043007 => {
+        delta_from => 5.043006,
+        changed => {
+            'B'                     => '1.91',
+            'B::Concise'            => '1.010',
+            'B::Op_private'         => '5.043007',
+            'Config'                => '5.043007',
+            'ExtUtils::ParseXS'     => '3.62',
+            'ExtUtils::ParseXS::Constants'=> '3.62',
+            'ExtUtils::ParseXS::CountLines'=> '3.62',
+            'ExtUtils::ParseXS::Eval'=> '3.62',
+            'ExtUtils::ParseXS::Node'=> '3.62',
+            'ExtUtils::ParseXS::Utilities'=> '3.62',
+            'ExtUtils::Typemaps'    => '3.62',
+            'ExtUtils::Typemaps::Cmd'=> '3.62',
+            'ExtUtils::Typemaps::InputMap'=> '3.62',
+            'ExtUtils::Typemaps::OutputMap'=> '3.62',
+            'ExtUtils::Typemaps::Type'=> '3.62',
+            'HTTP::Tiny'            => '0.092',
+            'Module::CoreList'      => '5.20260119',
+            'Module::CoreList::Utils'=> '5.20260119',
+            'POSIX'                 => '2.25',
+            'Pod::Html'             => '1.36',
+            'Pod::Html::Util'       => '1.36',
+        },
+        removed => {
+        }
+    },
+    5.043008 => {
+        delta_from => 5.043007,
+        changed => {
+            'B::Concise'            => '1.011',
+            'B::Deparse'            => '1.89',
+            'B::Op_private'         => '5.043008',
+            'CPAN::Meta'            => '2.150012',
+            'CPAN::Meta::Converter' => '2.150012',
+            'CPAN::Meta::Feature'   => '2.150012',
+            'CPAN::Meta::History'   => '2.150012',
+            'CPAN::Meta::Merge'     => '2.150012',
+            'CPAN::Meta::Prereqs'   => '2.150012',
+            'CPAN::Meta::Spec'      => '2.150012',
+            'CPAN::Meta::Validator' => '2.150012',
+            'Compress::Raw::Bzip2'  => '2.217',
+            'Compress::Raw::Zlib'   => '2.218',
+            'Compress::Zlib'        => '2.217',
+            'Config'                => '5.043008',
+            'Config::Perl::V'       => '0.39',
+            'DB_File'               => '1.860',
+            'English'               => '1.12',
+            'ExtUtils::ParseXS'     => '3.63',
+            'ExtUtils::ParseXS::Constants'=> '3.63',
+            'ExtUtils::ParseXS::CountLines'=> '3.63',
+            'ExtUtils::ParseXS::Eval'=> '3.63',
+            'ExtUtils::ParseXS::Node'=> '3.63',
+            'ExtUtils::ParseXS::Utilities'=> '3.63',
+            'ExtUtils::Typemaps'    => '3.63',
+            'ExtUtils::Typemaps::Cmd'=> '3.63',
+            'ExtUtils::Typemaps::InputMap'=> '3.63',
+            'ExtUtils::Typemaps::OutputMap'=> '3.63',
+            'ExtUtils::Typemaps::Type'=> '3.63',
+            'IO::Compress'          => '2.217',
+            'IO::Compress::Adapter::Bzip2'=> '2.217',
+            'IO::Compress::Adapter::Deflate'=> '2.217',
+            'IO::Compress::Adapter::Identity'=> '2.217',
+            'IO::Compress::Base'    => '2.217',
+            'IO::Compress::Base::Common'=> '2.217',
+            'IO::Compress::Bzip2'   => '2.217',
+            'IO::Compress::Deflate' => '2.217',
+            'IO::Compress::Gzip'    => '2.217',
+            'IO::Compress::Gzip::Constants'=> '2.217',
+            'IO::Compress::RawDeflate'=> '2.217',
+            'IO::Compress::Zip'     => '2.217',
+            'IO::Compress::Zip::Constants'=> '2.217',
+            'IO::Compress::Zlib::Constants'=> '2.217',
+            'IO::Compress::Zlib::Extra'=> '2.217',
+            'IO::Uncompress::Adapter::Bunzip2'=> '2.217',
+            'IO::Uncompress::Adapter::Identity'=> '2.217',
+            'IO::Uncompress::Adapter::Inflate'=> '2.217',
+            'IO::Uncompress::AnyInflate'=> '2.217',
+            'IO::Uncompress::AnyUncompress'=> '2.217',
+            'IO::Uncompress::Base'  => '2.217',
+            'IO::Uncompress::Bunzip2'=> '2.217',
+            'IO::Uncompress::Gunzip'=> '2.217',
+            'IO::Uncompress::Inflate'=> '2.217',
+            'IO::Uncompress::RawInflate'=> '2.217',
+            'IO::Uncompress::Unzip' => '2.217',
+            'Module::CoreList'      => '5.20260220',
+            'Module::CoreList::Utils'=> '5.20260220',
+            'Parse::CPAN::Meta'     => '2.150012',
+            'Time::HiRes'           => '1.9780',
+            'XS::APItest'           => '1.49',
+            'XS::Typemap'           => '0.21',
+            'feature'               => '2.01',
+            'threads'               => '2.44',
+            'threads::shared'       => '1.72',
+            'warnings'              => '1.77',
+        },
+        removed => {
+        }
+    },
+    5.042001 => {
+        delta_from => 5.042000,
+        changed => {
+            'B::Op_private'         => '5.042001',
+            'Config'                => '5.042001',
+            'Module::CoreList'      => '5.20260308',
+            'Module::CoreList::Utils'=> '5.20260308',
+            'POSIX'                 => '2.23_01',
+        },
+        removed => {
+        }
+    },
+    5.043009 => {
+        delta_from => 5.043008,
+        changed => {
+            'B'                     => '1.92',
+            'B::Op_private'         => '5.043009',
+            'CPAN::Meta'            => '2.150013',
+            'CPAN::Meta::Converter' => '2.150013',
+            'CPAN::Meta::Feature'   => '2.150013',
+            'CPAN::Meta::History'   => '2.150013',
+            'CPAN::Meta::Merge'     => '2.150013',
+            'CPAN::Meta::Prereqs'   => '2.150013',
+            'CPAN::Meta::Requirements'=> '2.145',
+            'CPAN::Meta::Requirements::Range'=> '2.145',
+            'CPAN::Meta::Spec'      => '2.150013',
+            'CPAN::Meta::Validator' => '2.150013',
+            'Compress::Raw::Bzip2'  => '2.218',
+            'Compress::Raw::Zlib'   => '2.222',
+            'Compress::Zlib'        => '2.219',
+            'Config'                => '5.043009',
+            'Cwd'                   => '3.95',
+            'ExtUtils::CBuilder'    => '0.280243',
+            'ExtUtils::CBuilder::Base'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::Unix'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::VMS'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::Windows'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::Windows::BCC'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::Windows::GCC'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::Windows::MSVC'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::aix'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::android'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::cygwin'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::darwin'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::dec_osf'=> '0.280243',
+            'ExtUtils::CBuilder::Platform::os2'=> '0.280243',
+            'ExtUtils::Command'     => '7.78',
+            'ExtUtils::Command::MM' => '7.78',
+            'ExtUtils::Liblist'     => '7.78',
+            'ExtUtils::Liblist::Kid'=> '7.78',
+            'ExtUtils::MM'          => '7.78',
+            'ExtUtils::MM_AIX'      => '7.78',
+            'ExtUtils::MM_Any'      => '7.78',
+            'ExtUtils::MM_BeOS'     => '7.78',
+            'ExtUtils::MM_Cygwin'   => '7.78',
+            'ExtUtils::MM_DOS'      => '7.78',
+            'ExtUtils::MM_Darwin'   => '7.78',
+            'ExtUtils::MM_MacOS'    => '7.78',
+            'ExtUtils::MM_NW5'      => '7.78',
+            'ExtUtils::MM_OS2'      => '7.78',
+            'ExtUtils::MM_OS390'    => '7.78',
+            'ExtUtils::MM_QNX'      => '7.78',
+            'ExtUtils::MM_UWIN'     => '7.78',
+            'ExtUtils::MM_Unix'     => '7.78',
+            'ExtUtils::MM_VMS'      => '7.78',
+            'ExtUtils::MM_VOS'      => '7.78',
+            'ExtUtils::MM_Win32'    => '7.78',
+            'ExtUtils::MM_Win95'    => '7.78',
+            'ExtUtils::MY'          => '7.78',
+            'ExtUtils::MakeMaker'   => '7.78',
+            'ExtUtils::MakeMaker::Config'=> '7.78',
+            'ExtUtils::MakeMaker::Locale'=> '7.78',
+            'ExtUtils::MakeMaker::version'=> '7.78',
+            'ExtUtils::MakeMaker::version::regex'=> '7.78',
+            'ExtUtils::Mkbootstrap' => '7.78',
+            'ExtUtils::Mksymlists'  => '7.78',
+            'ExtUtils::testlib'     => '7.78',
+            'File::Glob'            => '1.43',
+            'File::Spec'            => '3.95',
+            'File::Spec::AmigaOS'   => '3.95',
+            'File::Spec::Cygwin'    => '3.95',
+            'File::Spec::Epoc'      => '3.95',
+            'File::Spec::Functions' => '3.95',
+            'File::Spec::Mac'       => '3.95',
+            'File::Spec::OS2'       => '3.95',
+            'File::Spec::Unix'      => '3.95',
+            'File::Spec::VMS'       => '3.95',
+            'File::Spec::Win32'     => '3.95',
+            'IO'                    => '1.56',
+            'IO::Compress'          => '2.219',
+            'IO::Compress::Adapter::Bzip2'=> '2.219',
+            'IO::Compress::Adapter::Deflate'=> '2.219',
+            'IO::Compress::Adapter::Identity'=> '2.219',
+            'IO::Compress::Base'    => '2.219',
+            'IO::Compress::Base::Common'=> '2.219',
+            'IO::Compress::Bzip2'   => '2.219',
+            'IO::Compress::Deflate' => '2.219',
+            'IO::Compress::Gzip'    => '2.219',
+            'IO::Compress::Gzip::Constants'=> '2.219',
+            'IO::Compress::RawDeflate'=> '2.219',
+            'IO::Compress::Zip'     => '2.219',
+            'IO::Compress::Zip::Constants'=> '2.219',
+            'IO::Compress::Zlib::Constants'=> '2.219',
+            'IO::Compress::Zlib::Extra'=> '2.219',
+            'IO::Dir'               => '1.56',
+            'IO::File'              => '1.56',
+            'IO::Handle'            => '1.56',
+            'IO::Pipe'              => '1.56',
+            'IO::Seekable'          => '1.56',
+            'IO::Select'            => '1.56',
+            'IO::Socket'            => '1.56',
+            'IO::Socket::INET'      => '1.56',
+            'IO::Socket::UNIX'      => '1.56',
+            'IO::Uncompress::Adapter::Bunzip2'=> '2.219',
+            'IO::Uncompress::Adapter::Identity'=> '2.219',
+            'IO::Uncompress::Adapter::Inflate'=> '2.219',
+            'IO::Uncompress::AnyInflate'=> '2.219',
+            'IO::Uncompress::AnyUncompress'=> '2.219',
+            'IO::Uncompress::Base'  => '2.219',
+            'IO::Uncompress::Bunzip2'=> '2.219',
+            'IO::Uncompress::Gunzip'=> '2.219',
+            'IO::Uncompress::Inflate'=> '2.219',
+            'IO::Uncompress::RawInflate'=> '2.219',
+            'IO::Uncompress::Unzip' => '2.219',
+            'Module::CoreList'      => '5.20260320',
+            'Module::CoreList::Utils'=> '5.20260320',
+            'Opcode'                => '1.71',
+            'POSIX'                 => '2.26',
+            'Parse::CPAN::Meta'     => '2.150013',
+            'Storable'              => '3.40',
+            'XS::APItest'           => '1.50',
+            'feature'               => '2.02',
+            'threads'               => '2.45',
+            'threads::shared'       => '1.73',
+            'warnings'              => '1.78',
+        },
+        removed => {
+        }
+    },
+    5.042002 => {
+        delta_from => 5.042001,
+        changed => {
+            'B::Op_private'         => '5.042002',
+            'Compress::Raw::Zlib'   => '2.222',
+            'Config'                => '5.042002',
+            'Module::CoreList'      => '5.20260329_42',
+            'Module::CoreList::Utils'=> '5.20260329_42',
+        },
+        removed => {
+        }
+    },
 );
 
 sub is_core
@@ -25089,6 +26277,104 @@ sub is_core
     },
     5.042000 => {
         delta_from => 5.041013,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043000 => {
+        delta_from => 5.042,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043001 => {
+        delta_from => 5.043000,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.038005 => {
+        delta_from => 5.038004,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.040003 => {
+        delta_from => 5.040002,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043002 => {
+        delta_from => 5.043001,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043003 => {
+        delta_from => 5.043002,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043004 => {
+        delta_from => 5.043003,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043005 => {
+        delta_from => 5.043004,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043006 => {
+        delta_from => 5.043005,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043007 => {
+        delta_from => 5.043006,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043008 => {
+        delta_from => 5.043007,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.042001 => {
+        delta_from => 5.042,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043009 => {
+        delta_from => 5.043008,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.042002 => {
+        delta_from => 5.042001,
         changed => {
         },
         removed => {
Index: gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm,v
diff -u -p -a -u -p -r1.17 Utils.pm
--- gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm	26 Dec 2025 22:14:19 -0000	1.17
+++ gnu/usr.bin/perl/dist/Module-CoreList/lib/Module/CoreList/Utils.pm	29 Mar 2026 16:31:44 -0000
@@ -4,7 +4,7 @@ use strict;
 use warnings;
 use Module::CoreList;
 
-our $VERSION = '5.20250702';
+our $VERSION = '5.20260329_42';
 our %utilities;
 
 sub utilities {
@@ -2149,6 +2149,104 @@ my %delta = (
     },
     5.042000 => {
         delta_from => 5.041013,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043000 => {
+        delta_from => 5.042000,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043001 => {
+        delta_from => 5.043,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.038005 => {
+        delta_from => 5.038004,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.040003 => {
+        delta_from => 5.040002,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043002 => {
+        delta_from => 5.043001,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043003 => {
+        delta_from => 5.043002,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043004 => {
+        delta_from => 5.043003,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043005 => {
+        delta_from => 5.043004,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043006 => {
+        delta_from => 5.043005,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043007 => {
+        delta_from => 5.043006,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043008 => {
+        delta_from => 5.043007,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.042001 => {
+        delta_from => 5.042000,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.043009 => {
+        delta_from => 5.043008,
+        changed => {
+        },
+        removed => {
+        }
+    },
+    5.042002 => {
+        delta_from => 5.042001,
         changed => {
         },
         removed => {
Index: gnu/usr.bin/perl/ext/POSIX/POSIX.xs
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/POSIX.xs,v
diff -u -p -a -u -p -r1.31 POSIX.xs
--- gnu/usr.bin/perl/ext/POSIX/POSIX.xs	26 Dec 2025 22:14:20 -0000	1.31
+++ gnu/usr.bin/perl/ext/POSIX/POSIX.xs	29 Mar 2026 16:31:44 -0000
@@ -3588,7 +3588,7 @@ difftime(time1, time2)
 #     sv_setpv(TARG, ...) could be used rather than
 #     ST(0) = sv_2mortal(newSVpv(...))
 void
-strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = 0)
+strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)
 	SV *		fmt
 	int		sec
 	int		min
@@ -3604,10 +3604,8 @@ strftime(fmt, sec, min, hour, mday, mon,
             PERL_UNUSED_ARG(wday);
             PERL_UNUSED_ARG(yday);
 
-            /* -isdst triggers backwards compatibility mode for non-zero
-             * 'isdst' */
             SV *sv = sv_strftime_ints(fmt, sec, min, hour, mday, mon, year,
-                                           -abs(isdst));
+                                      isdst);
 	    if (sv) {
                 sv = sv_2mortal(sv);
             }
Index: gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm,v
diff -u -p -a -u -p -r1.10 POSIX.pm
--- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm	26 Dec 2025 22:14:20 -0000	1.10
+++ gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm	29 Mar 2026 16:31:44 -0000
@@ -4,7 +4,7 @@ use warnings;
 
 our ($AUTOLOAD, %SIGRT);
 
-our $VERSION = '2.23';
+our $VERSION = '2.23_01';
 
 require XSLoader;
 
Index: gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod,v
diff -u -p -a -u -p -r1.14 POSIX.pod
--- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod	26 Dec 2025 22:14:20 -0000	1.14
+++ gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod	29 Mar 2026 16:31:44 -0000
@@ -1866,49 +1866,17 @@ Identical to the string form of C<$!>, s
 =item C<strftime>
 
 Convert date and time information to string based on the current
-underlying locale of the program (except for any daylight savings time).
-Returns the string.
+underlying locale of the program.
+Returns the string in a mortalized SV; set to an empty string on error.
 
-Synopsis:
-
-	strftime(fmt, sec, min, hour, mday, mon, year,
-		 wday = -1, yday = -1, isdst = 0)
-
-The month (C<mon>) begins at zero,
-I<e.g.>, January is 0, not 1.  The
-year (C<year>) is given in years since 1900, I<e.g.>, the year 1995 is 95; the
-year 2001 is 101.  Consult your system's C<strftime()> manpage for details
-about these and the other arguments.
+ my $sv = strftime(fmt, sec, min, hour, mday, mon, year,
+                   wday = -1, yday = -1, isdst = -1)
 
 The C<wday> and C<yday> parameters are both ignored.  Their values are
 always determinable from the other parameters.
 
-C<isdst> should be C<1> or C<0>, depending on whether or not daylight
-savings time is in effect for the given time or not.
-
-If you want your code to be portable, your format (C<fmt>) argument
-should use only the conversion specifiers defined by the ANSI C
-standard (C99, to play safe).  These are C<aAbBcdHIjmMpSUwWxXyYZ%>.
-But even then, the B<results> of some of the conversion specifiers are
-non-portable.  For example, the specifiers C<aAbBcpZ> change according
-to the locale settings of the user, and both how to set locales (the
-locale names) and what output to expect are non-standard.
-The specifier C<c> changes according to the timezone settings of the
-user and the timezone computation rules of the operating system.
-The C<Z> specifier is notoriously unportable since the names of
-timezones are non-standard. Sticking to the numeric specifiers is the
-safest route.
-
-The arguments, except for C<isdst>, are made consistent as though by
-calling C<mktime()> before calling your system's C<strftime()> function.
-To get correct results, you must set C<isdst> to be the proper value.
-When omitted, the function assumes daylight savings is not in effect.
-
-The string for Tuesday, December 12, 1995 in the C<C> locale.
-
-	$str = POSIX::strftime( "%A, %B %d, %Y",
-				 0, 0, 0, 12, 11, 95, 2 );
-	print "$str\n";
+More details on the behavior and the specification of the other
+parameters are described in L<perlapi/sv_strftime_ints>.
 
 =item C<strlen>
 
Index: gnu/usr.bin/perl/ext/POSIX/t/posix.t
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/t/posix.t,v
diff -u -p -a -u -p -r1.13 posix.t
--- gnu/usr.bin/perl/ext/POSIX/t/posix.t	26 Dec 2025 22:14:20 -0000	1.13
+++ gnu/usr.bin/perl/ext/POSIX/t/posix.t	29 Mar 2026 16:31:44 -0000
@@ -273,7 +273,12 @@ print POSIX::strftime("ok $test # %H:%M,
 # input fields to strftime().
 sub try_strftime {
     my $expect = shift;
-    my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @_);
+    my @input = @_;
+
+    # Add zeros to missing parameters.  The final 0 is for isdst, and the zero
+    # forces use of mini_mktime (unless the code changes).
+    push @input, 0 while @input < 9;
+    my $got = POSIX::strftime("%a %b %d %H:%M:%S %Y %j", @input);
     is($got, $expect, "validating mini_mktime() and strftime(): $expect");
 }
 
Index: gnu/usr.bin/perl/ext/POSIX/t/time.t
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/ext/POSIX/t/time.t,v
diff -u -p -a -u -p -r1.7 time.t
--- gnu/usr.bin/perl/ext/POSIX/t/time.t	26 Dec 2025 22:14:20 -0000	1.7
+++ gnu/usr.bin/perl/ext/POSIX/t/time.t	29 Mar 2026 16:31:44 -0000
@@ -16,14 +16,16 @@ use Test::More tests => 31;
 # Those with a working tzset() should be able to use the TZ below.
 $ENV{TZ} = "EST5EDT";
 
+# It looks like POSIX.xs claims that only VMS and Mac OS traditional
+# don't have tzset().  MingW doesn't work.  Cygwin works in some places, but
+# not others.  The other Win32's below are guesses.
+my $has_tzset = $^O ne "VMS" && $^O ne "cygwin"
+             && ($^O ne "MSWin32" || (   $^O eq "MSWin32"
+                                      && $Config{make} eq 'nmake'))
+             && $^O ne "interix";
+
 SKIP: {
-    # It looks like POSIX.xs claims that only VMS and Mac OS traditional
-    # don't have tzset().  Win32 works to call the function, but it doesn't
-    # actually do anything.  Cygwin works in some places, but not others.  The
-    # other Win32's below are guesses.
-    skip "No tzset()", 1
-       if $^O eq "VMS" || $^O eq "cygwin" ||
-          $^O eq "MSWin32" || $^O eq "interix";
+    skip "No tzset()", 1 unless $has_tzset;
     tzset();
     SKIP: {
         my @tzname = tzname();
@@ -42,9 +44,7 @@ SKIP: {
 $ENV{TZ} = "UTC0UTC";
 
 SKIP: {
-    skip "No tzset()", 2
-       if $^O eq "VMS" || $^O eq "cygwin" ||
-          $^O eq "MSWin32" || $^O eq "interix";
+    skip "No tzset()", 2 unless $has_tzset;
     tzset();
     my @tzname = tzname();
     like($tzname[0], qr/(GMT|UTC)/i, "tzset() to GMT/UTC");
Index: gnu/usr.bin/perl/hints/aix.sh
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/hints/aix.sh,v
diff -u -p -a -u -p -r1.20 aix.sh
--- gnu/usr.bin/perl/hints/aix.sh	28 Jan 2025 01:06:15 -0000	1.20
+++ gnu/usr.bin/perl/hints/aix.sh	29 Mar 2026 16:31:44 -0000
@@ -700,4 +700,7 @@ case "$osvers" in
     ;;
 esac
 
+# GH #23825
+d_duplocale='undef'
+
 # EOF
Index: gnu/usr.bin/perl/hints/catamount.sh
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/hints/catamount.sh,v
diff -u -p -a -u -p -r1.17 catamount.sh
--- gnu/usr.bin/perl/hints/catamount.sh	26 Dec 2025 22:14:20 -0000	1.17
+++ gnu/usr.bin/perl/hints/catamount.sh	29 Mar 2026 16:31:44 -0000
@@ -31,11 +31,11 @@
 # mkdir -p /opt/perl-catamount
 # mkdir -p /opt/perl-catamount/include
 # mkdir -p /opt/perl-catamount/lib
-# mkdir -p /opt/perl-catamount/lib/perl5/5.42.0
+# mkdir -p /opt/perl-catamount/lib/perl5/5.42.2
 # mkdir -p /opt/perl-catamount/bin
 # cp *.h /opt/perl-catamount/include
 # cp libperl.a /opt/perl-catamount/lib
-# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.42.0
+# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.42.2
 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib
 #
 # With the headers and the libperl.a you can embed Perl to your Catamount
Index: gnu/usr.bin/perl/lib/B/Op_private.pm
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/lib/B/Op_private.pm,v
diff -u -p -a -u -p -r1.15 Op_private.pm
--- gnu/usr.bin/perl/lib/B/Op_private.pm	26 Dec 2025 22:14:20 -0000	1.15
+++ gnu/usr.bin/perl/lib/B/Op_private.pm	29 Mar 2026 16:31:44 -0000
@@ -118,7 +118,7 @@ package B::Op_private;
 our %bits;
 
 
-our $VERSION = "5.042000";
+our $VERSION = "5.042002";
 
 $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv);
 $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv);
Index: gnu/usr.bin/perl/lib/source/source_encoding.t
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/lib/source/source_encoding.t,v
diff -u -p -a -u -p -r1.1.1.1 source_encoding.t
--- gnu/usr.bin/perl/lib/source/source_encoding.t	26 Dec 2025 22:12:45 -0000	1.1.1.1
+++ gnu/usr.bin/perl/lib/source/source_encoding.t	29 Mar 2026 16:31:44 -0000
@@ -44,8 +44,13 @@ if (fresh_perl_like(<<~'EOT',
                     EOT
                 "",
                 { }, "source encoding can be turned off");
+    fresh_perl_like(<<~'EOT',
+                 use v5.41.0; my $var = "¶";
+                 EOT
+                qr/Use of non-ASCII character 0x[[:xdigit:]]{2} illegal/,
+                { }, ">= 'use statement affects rest of current line'");
 }
-else { # Above test depends on the previous one; if that failed, use this
+else { # Above tests depend on the previous one; if that failed, use this
        # alternate one
     fresh_perl_is(<<~'EOT',
                     use source::encoding 'ascii';
Index: gnu/usr.bin/perl/plan9/config_sh.sample
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/plan9/config_sh.sample,v
diff -u -p -a -u -p -r1.20 config_sh.sample
--- gnu/usr.bin/perl/plan9/config_sh.sample	26 Dec 2025 22:14:21 -0000	1.20
+++ gnu/usr.bin/perl/plan9/config_sh.sample	29 Mar 2026 16:31:45 -0000
@@ -35,8 +35,8 @@ api_subversion='0'
 api_version='42'
 api_versionstring='5.42.0'
 ar='ar'
-archlib='/sys/lib/perl5/5.42.0/386'
-archlibexp='/sys/lib/perl5/5.42.0/386'
+archlib='/sys/lib/perl5/5.42.2/386'
+archlibexp='/sys/lib/perl5/5.42.2/386'
 archname64=''
 archname='386'
 archobjs=''
@@ -833,17 +833,17 @@ inc_version_list=' '
 inc_version_list_init='0'
 incpath=''
 inews=''
-installarchlib='/sys/lib/perl/5.42.0/386'
+installarchlib='/sys/lib/perl/5.42.2/386'
 installbin='/usr/bin'
 installman1dir='/sys/man/1pub'
 installman3dir='/sys/man/2pub'
 installprefix='/usr'
 installprefixexp='/usr'
-installprivlib='/sys/lib/perl/5.42.0'
+installprivlib='/sys/lib/perl/5.42.2'
 installscript='/usr/bin'
-installsitearch='/sys/lib/perl/5.42.0/site_perl/386'
+installsitearch='/sys/lib/perl/5.42.2/site_perl/386'
 installsitebin='/usr/bin'
-installsitelib='/sys/lib/perl/5.42.0/site_perl'
+installsitelib='/sys/lib/perl/5.42.2/site_perl'
 installstyle='lib/perl5'
 installusrbinperl='undef'
 installvendorarch=''
@@ -971,8 +971,8 @@ pmake=''
 pr=''
 prefix='/usr'
 prefixexp='/usr'
-privlib='/sys/lib/perl/5.42.0'
-privlibexp='/sys/lib/perl/5.42.0'
+privlib='/sys/lib/perl/5.42.2'
+privlibexp='/sys/lib/perl/5.42.2'
 procselfexe=''
 prototype='define'
 ptrsize='4'
@@ -1037,13 +1037,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13
 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0'
 sig_size='50'
 signal_t='void'
-sitearch='/sys/lib/perl/5.42.0/site_perl/386'
+sitearch='/sys/lib/perl/5.42.2/site_perl/386'
 sitearchexp='/sys/lib/perl/site_perl/386'
 sitebin='/usr/bin'
 sitebinexp='/usr/bin'
-sitelib='/sys/lib/perl/5.42.0/site_perl'
-sitelib_stem='/sys/lib/perl/5.42.0/site_perl'
-sitelibexp='/sys/lib/perl/5.42.0/site_perl'
+sitelib='/sys/lib/perl/5.42.2/site_perl'
+sitelib_stem='/sys/lib/perl/5.42.2/site_perl'
+sitelibexp='/sys/lib/perl/5.42.2/site_perl'
 siteprefix='/usr'
 siteprefixexp='/usr'
 sizesize='4'
@@ -1078,7 +1078,7 @@ stdio_stream_array=''
 strerror_r_proto='0'
 strings='/sys/include/ape/string.h'
 submit=''
-subversion='0'
+subversion='2'
 sysman='/sys/man/1pub'
 tail=''
 tar=''
@@ -1163,8 +1163,8 @@ vendorlib_stem=''
 vendorlibexp=''
 vendorprefix=''
 vendorprefixexp=''
-version='5.42.0'
-version_patchlevel_string='version 42 subversion 0'
+version='5.42.2'
+version_patchlevel_string='version 42 subversion 2'
 versiononly='undef'
 vi=''
 xlibpth=''
@@ -1179,7 +1179,7 @@ config_args=''
 config_argc=0
 PERL_REVISION=5
 PERL_VERSION=42
-PERL_SUBVERSION=0
+PERL_SUBVERSION=2
 PERL_API_REVISION=5
 PERL_API_VERSION=42
 PERL_API_SUBVERSION=0
Index: gnu/usr.bin/perl/pod/perl.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perl.pod,v
diff -u -p -a -u -p -r1.46 perl.pod
--- gnu/usr.bin/perl/pod/perl.pod	26 Dec 2025 22:16:26 -0000	1.46
+++ gnu/usr.bin/perl/pod/perl.pod	29 Mar 2026 16:31:45 -0000
@@ -181,10 +181,13 @@ aux h2ph h2xs perlbug pl2pm pod2html pod
 
     perlhist            Perl history records
     perldelta           Perl changes since previous version
+    perl5421delta       Perl changes in version 5.42.1
     perl5420delta       Perl changes in version 5.42.0
+    perl5403delta       Perl changes in version 5.40.3
     perl5402delta       Perl changes in version 5.40.2
     perl5401delta       Perl changes in version 5.40.1
     perl5400delta       Perl changes in version 5.40.0
+    perl5385delta       Perl changes in version 5.38.5
     perl5384delta       Perl changes in version 5.38.4
     perl5383delta       Perl changes in version 5.38.3
     perl5382delta       Perl changes in version 5.38.2
Index: gnu/usr.bin/perl/pod/perl5385delta.pod
===================================================================
RCS file: gnu/usr.bin/perl/pod/perl5385delta.pod
diff -N gnu/usr.bin/perl/pod/perl5385delta.pod
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/usr.bin/perl/pod/perl5385delta.pod	29 Mar 2026 16:31:45 -0000
@@ -0,0 +1,125 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5385delta - what is new for perl v5.38.5
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.38.4 release and the 5.38.5
+release.
+
+If you are upgrading from an earlier release such as 5.38.3, first read
+L<perl5384delta>, which describes differences between 5.38.3 and 5.38.4.
+
+=head1 Security
+
+=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths
+
+Perl thread cloning had a working directory race condition where file
+operations may target unintended paths.  Perl 5.38 will no longer chdir to each
+handle.
+
+This problem was discovered by Vincent Lefèvre via
+[L<GH #23010|https://github.com/Perl/perl5/issues/23010>] and assigned
+[L<CVE-2025-40909|https://lists.security.metacpan.org/cve-announce/msg/30017499/>]
+by the L<CPAN Security Group|https://security.metacpan.org/>.
+
+Fixes were provided via [L<GH #23019|https://github.com/Perl/perl5/pull/23019>]
+and [L<GH #23361|https://github.com/Perl/perl5/pull/23361>].
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.38.4.  If any exist,
+they are bugs, and we request that you submit a report.  See L</Reporting
+Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20250413_38 to 5.20250803_38.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes listed in
+this document.  If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Acknowledgements
+
+Perl 5.38.5 represents approximately 4 months of development since Perl 5.38.4
+and contains approximately 3,300 lines of changes across 46 files from 8
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,100 lines of changes to 7 .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.38.5:
+
+James E Keenan, Karen Etheridge, Leon Timmermans, Lukas Mai, Philippe Bruhat
+(BooK), Richard Leach, Steve Hay, Thibault Duponchelle.
+
+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 F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<http://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Index: gnu/usr.bin/perl/pod/perl5403delta.pod
===================================================================
RCS file: gnu/usr.bin/perl/pod/perl5403delta.pod
diff -N gnu/usr.bin/perl/pod/perl5403delta.pod
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/usr.bin/perl/pod/perl5403delta.pod	29 Mar 2026 16:31:45 -0000
@@ -0,0 +1,125 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5403delta - what is new for perl v5.40.3
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.40.2 release and the 5.40.3
+release.
+
+If you are upgrading from an earlier release such as 5.40.1, first read
+L<perl5402delta>, which describes differences between 5.40.1 and 5.40.2.
+
+=head1 Security
+
+=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths
+
+Perl thread cloning had a working directory race condition where file
+operations may target unintended paths.  Perl 5.40 will no longer chdir to each
+handle.
+
+This problem was discovered by Vincent Lefèvre via
+[L<GH #23010|https://github.com/Perl/perl5/issues/23010>] and assigned
+[L<CVE-2025-40909|https://lists.security.metacpan.org/cve-announce/msg/30017499/>]
+by the L<CPAN Security Group|https://security.metacpan.org/>.
+
+Fixes were provided via [L<GH #23019|https://github.com/Perl/perl5/pull/23019>]
+and [L<GH #23361|https://github.com/Perl/perl5/pull/23361>].
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with 5.40.2.  If any exist,
+they are bugs, and we request that you submit a report.  See L</Reporting
+Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20250413_40 to 5.20250803_40.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes listed in
+this document.  If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Acknowledgements
+
+Perl 5.40.3 represents approximately 4 months of development since Perl 5.40.2
+and contains approximately 3,400 lines of changes across 43 files from 7
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,100 lines of changes to 6 .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.3:
+
+Karen Etheridge, Leon Timmermans, Lukas Mai, Philippe Bruhat (BooK), Richard
+Leach, Steve Hay, Thibault Duponchelle.
+
+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 F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<https://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Index: gnu/usr.bin/perl/pod/perl5420delta.pod
===================================================================
RCS file: gnu/usr.bin/perl/pod/perl5420delta.pod
diff -N gnu/usr.bin/perl/pod/perl5420delta.pod
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/usr.bin/perl/pod/perl5420delta.pod	29 Mar 2026 16:31:45 -0000
@@ -0,0 +1,1556 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5420delta - what is new for perl v5.42.0
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.42.0 release and the 5.40.0
+release.
+
+=head1 Core Enhancements
+
+=head2 More CORE:: subs
+
+C<chdir> has been added as a subroutine to the C<CORE::> namespace.
+
+Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir;
+$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called
+directly>. These cases are now fully supported.
+
+=head2 New pragma C<L<source::encoding>>
+
+This allows you to declare that the portion of a program for the
+remainder of the lexical scope of this pragma is encoded either entirely
+in ASCII (for S<C<use source::encoding 'ascii'>>) or if UTF-8 is allowed
+as well (for S<C<use source::encoding 'utf8'>>). No other encodings are
+accepted. The second form is entirely equivalent to S<C<use utf8>>, and
+may be used interchangeably with that.
+
+The purpose of this pragma is to catch cases early where you forgot to
+specify S<C<use utf8>>.
+
+S<C<use source::encoding 'ascii'>> is automatically enabled within the
+lexical scope of a S<C<use v5.41.0>> or higher.
+
+S<C<no source::encoding>> turns off all this checking for the remainder of
+its lexical scope. The meaning of non-ASCII characters is then undefined.
+
+=head2 New C<:writer> attribute on field variables
+
+Classes defined using C<use feature 'class'> are now able to automatically
+create writer accessors for scalar fields, by using the C<:writer> attribute,
+similar to the way that C<:reader> already creates reader accessors.
+
+    class Point {
+        field $x :reader :writer :param;
+        field $y :reader :writer :param;
+    }
+
+    my $p = Point->new( x => 20, y => 40 );
+    $p->set_x(60);
+
+=head2 New C<any> and C<all> operators
+
+Two new experimental features have been added, which introduce the
+list-processing operators C<any> and C<all>.
+
+    use v5.42;
+    use feature 'keyword_all';
+    no warnings 'experimental::keyword_all';
+
+    my @numbers = ...
+
+    if ( all { $_ % 2 == 0 } @numbers ) {
+        say "All the numbers are even";
+    }
+
+These keywords operate similarly to C<grep> except that they only
+ever return true or false, testing if any (or all) of the elements in
+the list make the testing block yield true.  Because of this they can
+short-circuit, avoiding the need to test any further elements if a given
+element determines the eventual result.
+
+These are inspired by the same-named functions in the L<List::Util> module,
+except that they are implemented as direct core operators, and thus perform
+faster, and do not produce an additional subroutine call stack frame for
+invoking the code block.
+
+The feature flags enabling those keywords have been named
+L<C<keyword_any>|feature/"The 'keyword_any' feature">
+and L<C<keyword_all>|feature/"The 'keyword_all' feature">
+to avoid confusion with the ability of the C<feature> module
+to refer to all of its features by using the C<:all>
+export tag.  [L<GH #23104|https://github.com/Perl/perl5/issues/23104>]
+
+The related experimental warning flags are consequently named
+C<experimental::keyword_any> and C<experimental::keyword_all>.
+
+=head2 Apostrophe as a global name separator can be disabled
+
+This was deprecated in Perl 5.38 and removed as scheduled in perl
+5.41.3, but after some discussion has been reinstated by default.
+
+This can be controlled with the C<apostrophe_as_package_separator>
+feature which is enabled by default, but is disabled from the 5.41
+feature bundle onwards.
+
+If you want to disable use within your own code you can explicitly
+disable the feature:
+
+  no feature "apostrophe_as_package_separator";
+
+Note that disabling this feature only prevents use of apostrophe as a
+package separator within code; symbolic references still treat C<'> as
+C<::> with the feature disabled:
+
+  my $symref = "My'Module'Var";
+  # default features
+  my $x = $My'Module'Var; # fine
+  no feature "apostrophe_as_package_separator";
+  no strict "refs";
+  my $y = $$symref;       # like $My::Module::Var
+  my $z = $My'Module'Var; # syntax error
+
+[L<GH #22644|https://github.com/Perl/perl5/issues/22644>]
+
+=head2 Lexical method declaration using C<my method>
+
+Like C<sub> since Perl version 5.18, C<method> can now be prefixed with the
+C<my> keyword.  This declares a subroutine that has lexical, rather than
+package visibility.  See L<perlclass> for more detail.
+
+=head2 Lexical method invocation operator C<< ->& >>
+
+Along with the ability to declare methods lexically, this release also permits
+invoking a lexical subroutine as if it were a method, bypassing the usual
+name-based method resolution.
+
+Combined with lexical method declaration, these two new abilities create the
+effect of having private methods.
+
+=head2 Switch and Smart Match operator kept, behind a feature
+
+The "switch" feature and the smartmatch operator, C<~~>, were introduced in
+v5.10.  Their behavior was significantly changed in v5.10.1.  When the
+"experiment" system was added in v5.18.0, switch and smartmatch were
+retroactively declared experimental.  Over the years, proposals to fix or
+supplement the features have come and gone.
+
+They were deprecated in Perl v5.38.0 and scheduled for removal in
+Perl v5.42.0. After extensive discussion their removal has been indefinitely
+postponed. Using them no longer produces a deprecation warning.
+
+Switch itself still requires the C<switch> feature, which is enabled
+by default for feature bundles from v5.9.5 through to v5.34.  Switch
+remains disabled in feature bundles 5.35 and later, but can be
+separately enabled:
+
+  # no switch here
+  use v5.10;
+  # switch here
+  use v5.36;
+  # no switch here
+  use feature "switch";
+  # switch here
+
+Smart match now requires the C<smartmatch> feature, which is enabled
+by default and included in all feature bundles up to 5.40.  It is
+disabled for the 5.41 feature bundle and later, but can be separately
+enabled:
+
+  # smartmatch here
+  use v5.41;
+  # no smartmatch here
+  use feature "smartmatch";
+  # smartmatch here
+
+[L<GH #22752|https://github.com/Perl/perl5/issues/22752>]
+
+=head2 Unicode 16.0 supported
+
+Perl now supports Unicode 16.0
+L<https://www.unicode.org/versions/Unicode16.0.0/> including the changes
+introduced in 15.1 L<https://www.unicode.org/versions/Unicode15.1.0/>.
+
+=head2 Assigning logical xor C<^^=> operator
+
+Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator
+C<^^>.  It was not noticed at the time that the assigning variant C<^^=> was
+also missing.  This is now added.
+
+=head1 Security
+
+=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr//
+
+A heap buffer overflow vulnerability was discovered in Perl.
+
+When there are non-ASCII bytes in the left-hand-side of the C<tr> operator,
+C<S_do_trans_invmap()> can overflow the destination pointer C<d>.
+
+  $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;'
+  Segmentation fault (core dumped)
+
+It is believed that this vulnerability can enable Denial of Service or
+Arbitrary Code Execution attacks on platforms that lack sufficient defenses.
+
+This problem was discovered by Nathan Mills and assigned
+[L<CVE-2024-56406|https://lists.security.metacpan.org/cve-announce/msg/28708725/>]
+by the L<CPAN Security Group|https://security.metacpan.org/>.
+
+The patch to fix this issue (L<87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd|https://github.com/Perl/perl5/commit/87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd>) is applicable to all perls that are vulnerable, including those
+out-of-support.
+
+=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths
+
+Perl thread cloning had a working directory race condition where file
+operations may target unintended paths. Perl 5.42 will no longer chdir
+to each handle.
+
+This problem was discovered by Vincent Lefèvre via [L<GH #23010|https://github.com/Perl/perl5/issues/23010>]
+and assigned [L<CVE-2025-40909|https://lists.security.metacpan.org/cve-announce/msg/30017499/>]
+by the L<CPAN Security Group|https://security.metacpan.org/>.
+
+Fixes were provided via [L<GH #23019|https://github.com/Perl/perl5/pull/23019>]
+and [L<GH #23361|https://github.com/Perl/perl5/pull/23361>].
+
+=head1 Incompatible Changes
+
+=head2 Removed containing function references for functions without eval
+
+Perl 5.40 reintroduced unconditional references from functions to their
+containing functions to fix a bug introduced in Perl 5.18 that broke the
+special behaviour of C<eval EXPR> in package C<DB> which is used by the
+debugger.
+
+In some cases this change led to circular reference chains between closures and
+other existing references, resulting in memory leaks.
+
+This change has been reverted, fixing
+[L<GH #22547|https://github.com/Perl/perl5/issues/22547>] but re-breaking
+[L<GH #19370|https://github.com/Perl/perl5/issues/19370>].
+
+This means the reference loops won't occur, and that lexical variables and
+functions from enclosing functions may not be visible in the debugger.
+
+Note that calling C<eval EXPR> in a function unconditionally causes a function
+to reference its enclosing functions as it always has.
+
+=head1 Performance Enhancements
+
+=over 4
+
+=item *
+
+Constant-folded strings are now shareable via the Copy-on-Write mechanism.
+[L<GH #22163|https://github.com/Perl/perl5/pull/22163>]
+
+The following code would previously have allocated eleven string buffers,
+each containing one million "A"s:
+
+    my @scalars; push @scalars, ("A" x 1_000_000) for 0..9;
+
+Now a single buffer is allocated and shared between a CONST OP and
+the ten scalar elements of C<@scalars>.
+
+Note that any code using this sort of constant to simulate memory leaks
+(perhaps in test files) must now permute the string in order to trigger
+a string copy and the allocation of separate buffers. For example,
+C<("A" x 1_000_000).time> might be a suitable small change.
+
+=item *
+
+C<tr///> now runs at the same speed regardless of the internal
+representation of its operand, as long as the only characters being
+translated are ASCII-range, for example C<tr/A-Z/a-z/>.  Previously, if
+the internal encoding was UTF-8, a slower, more general implementation
+was used.
+
+=item *
+
+Code that uses the C<indexed> function from the L<builtin> module to generate
+a list of index/value pairs out of an array or list which is then passed into
+a two-variable C<foreach> list to unpack those again is now optimised to be
+more efficient.
+
+    my @array = (...);
+
+    foreach my ($idx, $val) (builtin::indexed @array) {
+        ...
+    }
+
+Z<>
+
+    foreach my ($idx, $val) (builtin::indexed LIST...) {
+        ...
+    }
+
+In particular, a temporary list twice the size of the original is no longer
+generated.  Instead, the loop iterates down the original array or list
+in-place directly, in the same way that C<foreach (@array)> or
+C<foreach (LIST)> would do.
+
+=item *
+
+The peephole optimizer recognises the following zero-offset C<substr> patterns
+and swaps in a new dedicated operator (C<OP_SUBSTR_LEFT>).
+[L<GH #22785|https://github.com/Perl/perl5/issues/22785>]
+
+    substr($x, 0, ...)
+    substr($x, 0, ..., '')
+
+=item *
+
+The stringification of integers by L<perlfunc/print> and L<perlfunc/say>,
+when coming from an C<SVt_IV>, is now more efficient.
+[L<GH #22927|https://github.com/Perl/perl5/issues/22927>]
+
+=item *
+
+String reversal from a single argument, when the string buffer is not
+"swiped", is now done in a single pass and is noticeably faster.
+The extent of the improvement is compiler & hardware dependent.
+[L<GH #23012|https://github.com/Perl/perl5/issues/23012>]
+
+=back
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Archive::Tar> has been upgraded from version 3.02_001 to 3.04.
+
+=item *
+
+L<B::Deparse> has been upgraded from version 1.76 to 1.85.
+
+=item *
+
+L<Benchmark> has been upgraded from version 1.25 to 1.27.
+
+=item *
+
+L<builtin> has been upgraded from version 0.014 to 0.019.
+
+=item *
+
+L<Compress::Raw::Bzip2> has been upgraded from version 2.212 to 2.213.
+
+=item *
+
+L<Compress::Raw::Zlib> has been upgraded from version 2.212 to 2.213.
+
+=item *
+
+L<Config::Perl::V> has been upgraded from version 0.36 to 0.38.
+
+=item *
+
+L<CPAN> has been upgraded from version 2.36 to 2.38.
+
+=item *
+
+L<CPAN::Meta::YAML> has been upgraded from version 0.018 to 0.020.
+
+=item *
+
+L<Data::Dumper> has been upgraded from version 2.189 to 2.192.
+
+=item *
+
+L<DB> has been upgraded from version 1.08 to 1.09.
+
+=item *
+
+L<DBM_Filter> has been upgraded from version 0.06 to 0.07.
+
+=item *
+
+L<Devel::Peek> has been upgraded from version 1.34 to 1.36.
+
+=item *
+
+L<Devel::PPPort> has been upgraded from version 3.72 to 3.73.
+
+=item *
+
+L<Digest::MD5> has been upgraded from version 2.58_01 to 2.59.
+
+=item *
+
+L<DynaLoader> has been upgraded from version 1.56 to 1.57.
+
+=item *
+
+L<experimental> has been upgraded from version 0.032 to 0.035.
+
+=item *
+
+L<Exporter> has been upgraded from version 5.78 to 5.79.
+
+=item *
+
+L<ExtUtils::CBuilder> has been upgraded from version 0.280240 to 0.280242.
+
+=item *
+
+L<ExtUtils::MakeMaker> has been upgraded from version 7.70 to 7.76.
+
+=item *
+
+L<ExtUtils::ParseXS> has been upgraded from version 3.51 to 3.57.
+
+=item *
+
+L<ExtUtils::Typemaps> has been upgraded from version 3.51 to 3.57.
+
+=item *
+
+L<Fcntl> has been upgraded from version 1.18 to 1.20.
+
+=item *
+
+L<feature> has been upgraded from version 1.89 to 1.97.
+
+=item *
+
+L<fields> has been upgraded from version 2.25 to 2.27.
+
+=item *
+
+L<File::Spec> has been upgraded from version 3.90 to 3.94.
+
+=item *
+
+L<Getopt::Long> has been upgraded from version 2.57 to 2.58.
+
+=item *
+
+L<HTTP::Tiny> has been upgraded from version 0.088 to 0.090.
+
+=item *
+
+L<IO::Compress> has been upgraded from version 2.212 to 2.213.
+
+=item *
+
+L<IO::Socket::IP> has been upgraded from version 0.42 to 0.43.
+
+=item *
+
+L<IPC::Open3> has been upgraded from version 1.22 to 1.24.
+
+=item *
+
+L<locale> has been upgraded from version 1.12 to 1.13.
+
+=item *
+
+L<Math::BigInt> has been upgraded from version 2.003002 to 2.005002.
+
+=item *
+
+L<Math::BigInt::FastCalc> has been upgraded from version 0.5018 to 0.5020.
+
+=item *
+
+L<Math::Complex> has been upgraded from version 1.62 to 1.63.
+
+=item *
+
+L<Memoize> has been upgraded from version 1.16 to 1.17.
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20240609 to 5.20250702.
+
+=item *
+
+L<NDBM_File> has been upgraded from version 1.17 to 1.18.
+
+=item *
+
+L<ODBM_File> has been upgraded from version 1.18 to 1.20.
+
+=item *
+
+L<Opcode> has been upgraded from version 1.65 to 1.69.
+
+=item *
+
+L<overload> has been upgraded from version 1.37 to 1.40.
+
+=item *
+
+L<parent> has been upgraded from version 0.241 to 0.244.
+
+=item *
+
+L<perlfaq> has been upgraded from version 5.20240218 to 5.20250619.
+
+=item *
+
+L<Pod::Usage> has been upgraded from version 2.03 to 2.05.
+
+=item *
+
+L<podlators> has been upgraded from version 5.01_02 to v6.0.2.
+
+=item *
+
+L<POSIX> has been upgraded from version 2.20 to 2.23.
+
+=item *
+
+L<re> has been upgraded from version 0.47 to 0.48.
+
+=item *
+
+L<Safe> has been upgraded from version 2.46 to 2.47.
+
+=item *
+
+L<Scalar::Util> has been upgraded from version 1.63 to 1.68_01.
+
+=item *
+
+L<Search::Dict> has been upgraded from version 1.07 to 1.08.
+
+=item *
+
+L<SelfLoader> has been upgraded from version 1.27 to 1.28.
+
+=item *
+
+L<sort> has been upgraded from version 2.05 to 2.06.
+
+=item *
+
+L<Storable> has been upgraded from version 3.32 to 3.37.
+
+=item *
+
+L<strict> has been upgraded from version 1.13 to 1.14.
+
+=item *
+
+L<Term::Table> has been upgraded from version 0.018 to 0.024.
+
+=item *
+
+L<Test::Harness> has been upgraded from version 3.48 to 3.50.
+
+=item *
+
+L<Test::Simple> has been upgraded from version 1.302199 to 1.302210.
+
+=item *
+
+L<Thread> has been upgraded from version 3.05 to 3.06.
+
+=item *
+
+L<threads> has been upgraded from version 2.40 to 2.43.
+
+=item *
+
+L<threads::shared> has been upgraded from version 1.69 to 1.70.
+
+=item *
+
+L<Tie::File> has been upgraded from version 1.09 to 1.10.
+
+=item *
+
+L<Tie::RefHash> has been upgraded from version 1.40 to 1.41.
+
+=item *
+
+L<Time::HiRes> has been upgraded from version 1.9777 to 1.9778.
+
+=item *
+
+L<Time::Piece> has been upgraded from version 1.3401_01 to 1.36.
+
+=item *
+
+L<Unicode::UCD> has been upgraded from version 0.78 to 0.81.
+
+=item *
+
+L<utf8> has been upgraded from version 1.25 to 1.27.
+
+=item *
+
+L<version> has been upgraded from version 0.9930 to 0.9933.
+
+=item *
+
+L<VMS::Filespec> has been upgraded from version 1.13 to 1.15.
+
+=item *
+
+L<warnings> has been upgraded from version 1.69 to 1.74.
+
+=item *
+
+L<Win32> has been upgraded from version 0.59 to 0.59_01.
+
+=item *
+
+L<XS::APItest> has been upgraded from version 1.36 to 1.43.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes
+listed in this document. If you find any we have missed, open an issue
+at L<https://github.com/Perl/perl5/issues>.
+
+Additionally, the following selected changes have been made:
+
+=head3 L<perlapi>
+
+=over 4
+
+=item *
+
+Combined the documentation for several groups of related functions
+into single entries.
+
+=item *
+
+All forms of C<gv_fetchmeth()> are now documented together.
+
+=item *
+
+C<gv_autoload4> is now documented with C<gv_autoload_pv> and additional notes added.
+The long C<Perl_> forms are now listed when available.
+
+=back
+
+=head3 L<perldata>
+
+=over 4
+
+=item *
+
+Binary and octal floating-point constants (such as C<012.345p-2> and
+C<0b101.11p-1>) are now documented. This feature was first introduced in perl
+5.22.0 together with hexadecimal floating-point constants and had a few bug
+fixes in perl 5.28.0, but it was never formally documented.
+[L<GH #18664|https://github.com/Perl/perl5/issues/18664>]
+
+=back
+
+=head3 L<perlfunc>
+
+=over 4
+
+=item *
+
+Clarified the description of C<ref> and C<reftype> in relation
+to built-in types and class names.
+
+=item *
+
+Clarified that perl C<sort> is stable (and has been since v5.8.0).
+
+=item *
+
+The recommended alternatives to the C<rand()> function were updated to modern modules
+recommended by the L<CPAN Security Group|https://security.metacpan.org/>.
+[L<GH #22873|https://github.com/Perl/perl5/pull/22873>]
+
+=back
+
+=head3 L<perlgov>
+
+=over 4
+
+=item *
+
+The list of Steering Council and Core Team members have been updated, following the conclusion of
+the latest election on 2024-07-17.
+
+=back
+
+=head3 L<perlguts>
+
+=over 4
+
+=item *
+
+Added some description of "real" C<AV>s compared to "fake" C<AV>s.
+
+=item *
+
+Documentation was updated to reflect that mixing C<Newx>, C<Renew>, and
+C<Safefree> vs C<malloc>, C<realloc>, and C<free> are not allowed, and mixing
+pointers between the 2 classes of APIs is not allowed. Updates made in
+L<perlguts> and L<perlclib>.
+
+=item *
+
+Additional caveats have been added to the description of C<TARG>.
+
+=back
+
+=head3 L<perlop>
+
+=over 4
+
+=item *
+
+Portions of perlop are supposed to be ordered so that all the operators
+wth the same precedence are in a single section, and the sections are
+ordered so that the highest precedence operators appear first.
+This ordering has now been restored.  Other reorganization was done to
+improve clarity, with more basic operations described before ones that
+depend on them.
+
+=item *
+
+The documentation for here-docs has been cleaned up and reorganized.
+Indented here-docs were formerly documented separately, now the two
+types have interwoven documentation which is more compact, and easier to
+understand.
+
+=item *
+
+The documentation of the C<xor> operator has been expanded.
+
+=item *
+
+Outdated advice about using relational string operators in UTF-8 locales
+has been removed.  Use L<Unicode::Collate> for the best results, but
+these operators will give adequate results on many platforms.
+
+=item *
+
+Normalized alignment of verbatim sections, fixing how they are displayed by
+some Pod viewers that strip indentation.
+
+=back
+
+=head3 L<perlvar>
+
+=over 4
+
+=item *
+
+Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation
+error, not a warning.
+
+=back
+
+=head1 Diagnostics
+
+The following additions or changes have been made to diagnostic output,
+including warnings and fatal error messages. For the complete list of
+diagnostic messages, see L<perldiag>.
+
+=head2 New Diagnostics
+
+=head3 New Errors
+
+=over 4
+
+=item *
+
+L<Use of non-ASCII character 0x%X illegal when 'use source::encoding "ascii"' is in effect|perldiag/Use of non-ASCII character 0x%X illegal when 'use source::encoding "ascii"' is in effect>
+
+(F) This pragma forbids non-ASCII characters within its scope.
+
+=item *
+
+L<Undefined subroutine &%s called, close to label '%s'|perldiag/"Undefined subroutine &%s called, close to label '%s'">
+
+(F) The subroutine indicated hasn't been defined, or if it was, it has
+since been undefined.
+
+This error could also indicate a mistyped package separator, when a
+single colon was typed instead of two colons. For example, C<Foo:bar()>
+would be parsed as the label C<Foo> followed by an unqualified function
+name: C<foo: bar()>. [L<GH #22860|https://github.com/Perl/perl5/issues/22860>]
+
+=back
+
+=head3 New Warnings
+
+=over 4
+
+=item *
+
+L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental">
+
+(S experimental::class) This warning is emitted if you use the C<__CLASS__>
+keyword of C<use feature 'class'>. This keyword is currently
+experimental and its behaviour may change in future releases of Perl.
+
+=item *
+
+L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()">
+
+(W io) You called readdir(), telldir(), seekdir(), rewinddir() or
+closedir() on a handle that was opened with open().  If you want to
+use these functions to traverse the contents of a directory, you need
+to open the handle with opendir().
+
+[L<GH #22394|https://github.com/Perl/perl5/issues/22394>]
+
+=item *
+
+L<Possible precedence problem between ! and %s|perldiag/"Possible precedence problem between ! and %s">
+
+(W precedence) You wrote something like
+
+    !$x < $y               # parsed as: (!$x) < $y
+    !$x eq $y              # parsed as: (!$x) eq $y
+    !$x =~ /regex/         # parsed as: (!$x) =~ /regex/
+    !$obj isa Some::Class  # parsed as: (!$obj) isa Some::Class
+
+but because C<!> has higher precedence than comparison operators, C<=~>, and
+C<isa>, this is interpreted as comparing/matching the logical negation of the
+first operand, instead of negating the result of the comparison/match.
+
+To disambiguate, either use a negated comparison/binding operator:
+
+    $x >= $y
+    $x ne $y
+    $x !~ /regex/
+
+... or parentheses:
+
+    !($x < $y)
+    !($x eq $y)
+    !($x =~ /regex/)
+    !($obj isa Some::Class)
+
+... or the low-precedence C<not> operator:
+
+    not $x < $y
+    not $x eq $y
+    not $x =~ /regex/
+    not $obj isa Some::Class
+
+(If you did mean to compare the boolean result of negating the first operand,
+parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.)
+
+Note: this warning does not trigger for code like C<!!$x == $y>,
+i.e. where double negation (C<!!>) is used as a convert-to-boolean operator.
+
+=back
+
+=head2 Changes to Existing Diagnostics
+
+=over 4
+
+=item *
+
+L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s">
+
+This was consolidated from separate messages for readdir(), telldir(),
+seekdir(), rewinddir() and closedir() as part of refactoring for
+[L<GH #22394|https://github.com/Perl/perl5/issues/22394>].
+
+=item *
+
+L<Useless use of %s in void context|perldiag/"Useless use of %s in void context">
+
+This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>.
+[L<GH #22969|https://github.com/Perl/perl5/issues/22969>]
+
+=item *
+
+L<Use of uninitialized value%s|perldiag/"Use of uninitialized value%s">
+
+Prevent this warning when accessing a function parameter in C<@_> that
+is an lvalue reference to an untied hash element where the key was
+undefined.  This warning is still produced at the point of call.
+[L<GH #22423|https://github.com/Perl/perl5/issues/22423>]
+
+=back
+
+=head1 Utility Changes
+
+=head2 F<Porting/test-dist-modules.pl>
+
+=over 4
+
+=item *
+
+Separate installation (without overwriting installed modules) is now the default.
+
+=item *
+
+Documentation is significantly enhanced.
+
+=back
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L<GH #22569|https://github.com/Perl/perl5/issues/22569>]
+Bug first reported downstream L<bugs.gentoo.org/939014|https://bugs.gentoo.org/939014>
+
+=item *
+
+The (mostly undocumented) configuration macro C<PERL_STRICT_CR> has been
+removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>),
+it would make the perl parser throw a fatal error when it encountered a CR
+(carriage return) character in source files. The default (and now only)
+behavior of the perl parser is to strip CRs paired with newline characters and
+otherwise treat them as whitespace.
+
+(C<PERL_STRICT_CR> was originally introduced in perl 5.005 to optionally
+restore backward compatibility with perl 5.004, which had made CR in source
+files an error. Before that, CR was accepted, but retained literally in quoted
+multi-line constructs such as here-documents, even at the end of a line.)
+
+=item *
+
+Similarly, the (even less documented) configuration macro C<PERL_CR_FILTER> has
+been removed. When enabled, it would install a default source filter to strip
+carriage returns from source code before the parser proper got to see it.
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and
+changes in this release.  Furthermore, these significant changes were
+made:
+
+=over 4
+
+=item *
+
+A new F<t/run/todo.t> test script was added as a place for TODO tests
+for known unfixed bugs. Patches are welcome to add to this file.
+
+=item *
+
+Added testing of the perl headers against the C++ compiler
+corresponding to the C compiler perl is being built with.
+[L<GH #22232|https://github.com/Perl/perl5/issues/22232>]
+
+=back
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item arm64 Darwin
+
+Fix arm64 darwin hints when using use64bitall with Configure [L<GH #22672|https://github.com/Perl/perl5/issues/22672>]
+
+=item Android
+
+Changes to F<perl_langinfo.h> for Android [L<GH #22650|https://github.com/Perl/perl5/issues/22650>] related to [L<GH #22627|https://github.com/Perl/perl5/issues/22627>].
+
+=item Cygwin
+
+F<cygwin.c>: fix several silly/terrible C errors. [L<GH #22724|https://github.com/Perl/perl5/issues/22724>]
+
+Supply an explicit base address for C<cygperl*.dll> that cannot
+conflict with those generated by C<--enable-auto-image-base>.  [L<GH #22695|https://github.com/Perl/perl5/issues/22695>][L<GH #22104|https://github.com/Perl/perl5/issues/22104>]
+
+=item MacOS (Darwin)
+
+Collation of strings using locales on MacOS 15 (Darwin 24) and up has
+been turned off due to a failed assertion in its libc.
+
+If earlier versions are also experiencing issues (such as failures in
+F<locale.t>), you can explicitly disable locale collation by adding the
+C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>,
+or just C<-DNO_LOCALE_COLLATE> to the C<ccflags> and C<cppflags>
+variables in F<config.sh>.
+
+=back
+
+=head1 Internal Changes
+
+=over 4
+
+=item *
+
+The L<perlapi/C<sv_strftime_ints>> function is introduced.  This is an
+enhanced version of L<perlapi/C<my_strftime>>, which is retained for
+backwards compatibility.  Both are to call L<strftime(3)> when you have
+the year, month, hour, etc.  The new function handles UTF8ness for you,
+and allows you to specify if you want the possibility of daylight
+savings time to be considered.  C<my_strftime> never considers DST.
+
+=item *
+
+The C<bytes_to_utf8>, C<bytes_from_utf8>, and C<bytes_from_utf8_loc>
+functions are no longer experimental.
+
+=item *
+
+Calls to L<call_argv()|perlapi/call_argv> with the C<G_DISCARD> flag
+set also ensure the SV parameters constructed from the C<argv>
+parameter are released before C<call_argv()> returns. Previously they
+were released on the next L<FREETMPS|perlapi/FREETMPS>. [L<GH #22255|https://github.com/Perl/perl5/issues/22255>]
+
+=item *
+
+When built with the C<-DDEBUGGING> compile option, perl API functions that
+take pointers to distinct types of SVs (AVs, HVs or CVs) will check the
+C<SvTYPE()> of the passed values to ensure they are valid.  Additionally,
+internal code within core functions that attempts to extract AVs, HVs or CVs
+from reference values passed in will also perform such checks.
+
+While this has been entirely tested by normal Perl CI testing, there may
+still be some corner-cases where these constraints are violated in
+otherwise-valid calls.  These may require further investigation if they are
+found, and specific code to be adjusted to account for it.
+
+=item *
+
+The C<op_dump()> function has been expanded to include additional information
+about the recent C<OP_METHSTART> and C<OP_INITFIELD> ops, as well as for
+C<OP_ARGCHECK> and C<OP_ARGELEM> which had not been done previously.
+
+=item *
+
+C<op_dump()> now also has the facility to print extra debugging information
+about custom operators, if those operators register a helper function via the
+new C<xop_dump> element of the C<XOP> structure. For more information, see the
+relevant additions to L<perlguts|perlguts/"Custom Operators">.
+
+=item *
+
+New API functions are introduced to convert strings encoded in UTF-8 to
+their ordinal code point equivalent.  These are safe to use by default,
+and generally more convenient to use than the existing ones.
+
+L<perlapi/C<utf8_to_uv>> and L<perlapi/C<utf8_to_uv_or_die>> replace
+L<perlapi/C<utf8_to_uvchr>> (which is retained for backwards
+compatibility), but you should convert to use the new forms, as likely
+you aren't using the old one safely.
+
+To convert in the opposite direction, you can now use
+L<perlapi/C<uv_to_utf8>>.  This is not a new function, but a new synonym
+for L<perlapi/C<uvchr_to_utf8>>.  It is added so you don't have to learn
+two sets of names.
+
+There are also two new functions, L<perlapi/C<strict_utf8_to_uv>> and
+L<perlapi/C<c9strict_utf8_to_uv>> which do the same thing except when
+the input string represents a code point that Unicode doesn't accept as
+legal for interchange, using either the strict original definition
+(C<strict_utf8_to_uv>), or the looser one given by
+L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>
+(C<c9strict_utf8_to_uv>).  When the input string represents one of the
+restricted code points, these functions return the Unicode
+C<REPLACEMENT CHARACTER> instead.
+
+Also L<perlapi/C<extended_utf8_to_uv>> is a synonym for C<utf8_to_uv>, for use
+when you want to emphasize that the entire range of Perl extended UTF-8
+is acceptable.
+
+There are also replacement functions for the three more specialized
+conversion functions that you are unlikely to need to use.  Again, the
+old forms are kept for backwards compatibility, but you should convert
+to use the new forms.
+
+L<perlapi/C<utf8_to_uv_flags>> replaces L<perlapi/C<utf8n_to_uvchr>>.
+
+L<perlapi/C<utf8_to_uv_errors>> replaces L<perlapi/C<utf8n_to_uvchr_error>>.
+
+L<perlapi/C<utf8_to_uv_msgs>> replaces
+L<perlapi/C<utf8n_to_uvchr_msgs>>.
+
+Also added are the inverse functions L<perlapi/C<uv_to_utf8_flags>>
+and L<perlapi/C<uv_to_utf8_msgs>>, which are synonyms for the existing
+functions, L<perlapi/C<uvchr_to_utf8_flags>> and
+L<perlapi/C<uvchr_to_utf8_flags_msgs>> respectively.  These are provided only
+so you don't have to learn two sets of names.
+
+=item *
+
+Three new API functions are introduced to convert strings encoded in
+UTF-8 to native bytes format (if possible).  These are easier to use
+than the existing ones, and they avoid unnecessary memory allocations.
+The functions are L<perlapi/C<utf8_to_bytes_overwrite>> which is used
+when it is ok for the input string to be overwritten with the converted
+result; and L<perlapi/C<utf8_to_bytes_new_pv>> and
+L<perlapi/C<utf8_to_bytes_temp_pv>> when the original string must be
+preserved intact.  C<utf8_to_bytes_temp_pv> returns the result in a
+temporary using L<perlapi>/C<SAVEFREEPV> that will automatically be
+destroyed.  With C<utf8_to_bytes_new_pv>, you are responsible for
+freeing the newly allocated memory that is returned if the conversion is
+successful.
+
+The latter two functions are designed to replace
+L<perlapi/C<bytes_from_utf8>> which creates memory unnecessarily, or
+unnecessarily large.
+
+=item *
+
+New API functions L<C<valid_identifier_pve()>|perlapi/valid_identifier_pve>,
+L<C<valid_identifier_pvn()>|perlapi/valid_identifier_pvn> and
+L<C<valid_identifier_sv()>|perlapi/valid_identifier_sv> have been added, which
+test if a string would be considered by Perl to be a valid identifier name.
+
+=item *
+
+When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that
+both are "bodyless" types, Perl_sv_setsv_flags will now just change the
+destination type to match the source type. Previously, an SVt_IV would have
+been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been
+upgraded to a SVt_PVIV to store an IV. This change prevents the need to
+allocate - and later free - the relevant body struct.
+
+=item *
+
+Two new API functions are introduced to convert strings encoded in
+native bytes format to UTF-8.  These return the string unchanged if its
+UTF-8 representation is the same as the original.  Otherwise, new memory
+is allocated to contain the converted string.  This is in contrast to
+the existing L<perlapi/C<bytes_to_utf8>> which always allocates new
+memory.  The new functions are L<perlapi/C<bytes_to_utf8_free_me>> and
+L<perlapi/C<bytes_to_utf8_temp_pv>>.
+L<perlapi/C<bytes_to_utf8_temp_pv>> arranges for the new memory to
+automatically be freed.  With C<bytes_to_utf8_free_me>, you are
+responsible for freeing any newly allocated memory.
+
+=item *
+
+The way that subroutine signatures are parsed by the parser grammar has been
+changed.
+
+Previously, when parsing individual signature parameters, the parser would
+accumulate an C<OP_ARGELEM> optree fragment for each parameter on the parser
+stack, collecting them in an C<OP_LIST> sequence, before finally building the
+complete argument handling optree itself, in a large action block defined
+directly in F<perly.y>.
+
+In the new approach, all the optree generation is handled by newly-defined
+functions in F<op.c> which are called by the action blocks in the parser.
+These do not keep state on the parser stack, but instead in a dedicated memory
+structure referenced by the main C<PL_parser> structure.  This is intended to
+be largely opaque to other code, and accessed only via the new functions.
+
+This new arrangement is intended to allow more flexible code generation and
+additional features to be developed in the future.
+
+=item *
+
+Three new API functions have been added to interact with the regexp global
+match position stored in an SV.  These are C<sv_regex_global_pos_get()>,
+C<sv_regex_global_pos_set()> and C<sv_regex_global_pos_clear()>.  Using these
+API functions avoids XS modules needing to know about or interact directly
+with the way this position is currently stored, which involves the
+C<PERL_MAGIC_regex_global> magic type.
+
+=item *
+
+New C<SvVSTRING> API macro
+
+A new API macro has been added, which is used to obtain the second string
+buffer out of a "vstring" SV, in a manner similar to the C<SvPV> macro which
+obtains the regular string buffer out of a regular SV.
+
+    STRLEN len;
+    const char *vstr_pv = SvVSTRING(sv, vstr_len);
+
+See L<perlapi/C<SvVSTRING>>.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+Fix null pointer dereference in S_SvREFCNT_dec [L<GH #16627|https://github.com/Perl/perl5/issues/16627>].
+
+=item *
+
+Fix feature 'class' Segmentation fault in DESTROY [L<GH #22278|https://github.com/Perl/perl5/issues/22278>].
+
+=item *
+
+C<chdir> now returns real booleans (as its documentation describes), not
+integers. This means the result of a failed C<chdir> now stringifies to C<''>,
+not C<'0'>.
+
+[L<GH #22365|https://github.com/Perl/perl5/issues/22365>]
+
+=item *
+
+Compound assignment operators return lvalues that can be further modified:
+
+    ($x &= $y) += $z;
+    # Equivalent to:
+    #  $x &= $y;
+    #  $x += $z;
+
+However, the separate numeric/string bitwise operators provided by L<the
+C<bitwise> feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>,
+did not return such lvalues:
+
+    use feature qw(bitwise);
+    ($x &= $y) += $z;
+    # Used to die:
+    #  Can't modify numeric bitwise and (&) in addition (+) at ...
+
+This has been corrected. [L<GH #22412|https://github.com/Perl/perl5/issues/22412>]
+
+=item *
+
+Starting in v5.39.8, L<POSIX/C<strftime>> would crash or produce odd errors
+(such as C<Out of memory in perl:util:safesysmalloc>) when given a format
+string that wasn't actually a string, but a number, C<undef>, or an object
+(even one with overloaded string conversion).
+
+Now C<strftime> stringifies its first argument, as before.
+[L<GH #22498|https://github.com/Perl/perl5/issues/22498>]
+
+Also, fix C<POSIX::strftime()> [L<GH #22369|https://github.com/Perl/perl5/issues/22369>].
+
+=item *
+
+C<pack("p", ...)> and C<pack("P", ...)> now SvPV_force() the supplied
+SV unless it is read only.  This will remove CoW from the SV and
+prevents code that writes through the generated pointer from modifying
+the value of other SVs that happen the share the same CoWed string
+buffer.
+
+Note: this does not make C<pack("p",... )> safe, if the SV is magical
+then any writes to the buffer will likely be discarded on the next
+read.  [L<GH #22380|https://github.com/Perl/perl5/issues/22380>]
+
+=item *
+
+Enforce C<no feature "bareword_filehandles"> for bareword file handles
+that have strictness removed because they are used in open() with a
+"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L<GH #22568|https://github.com/Perl/perl5/issues/22568>]
+
+=item *
+
+Using C<goto> to tail call, or using the call_sv() and related APIs to
+call, any of trim(), refaddr(), reftype(), ceil(), floor() or
+stringify() in the C<builtin::> package would crash or assert due to a
+C<TARG> handling bug. [L<GH #22542|https://github.com/Perl/perl5/issues/22542>]
+
+=item *
+
+Fix sv_gets() to accept a C<SSize_t> append offset instead of C<I32>.
+This prevents integer overflows when appending to a large C<SV> for
+C<readpipe> aka C<qx//> and C<readline>.
+L<https://www.perlmonks.org/?node_id=11161665>
+
+=item *
+
+Fixed an issue where C<utf8n_to_uvchr> failed to correctly identify
+certain invalid UTF-8 sequences as invalid. Specifically, sequences
+that start with continuation bytes or unassigned bytes could cause
+unexpected behavior or a panic. This fix ensures that such invalid
+sequences are now properly detected and handled. This correction
+also resolves related issues in modules that handle UTF-8 processing,
+such as C<Encode.pm>.
+
+=item *
+
+The perl parser would erroneously parse some POD directives
+as if they were C<=cut>. Some other POD directives
+whose names start with I<cut>, prematurely terminating an embedded POD section.
+The following cases were affected: I<cut> followed by a digit (e.g.
+C<=cut2studio>), I<cut> followed by an underscore (e.g. C<=cut_grass>), and in
+string C<eval>, any identifier starting with I<cut> (e.g. C<=cute>).
+[L<GH #22759|https://github.com/Perl/perl5/issues/22759>]
+
+=item *
+
+Builds with C<-msse> and quadmath on 32-bit x86 systems would crash
+with a misaligned access early in the build. [L<GH #22577|https://github.com/Perl/perl5/issues/22577>]
+
+=item *
+
+On threaded builds on POSIX-like systems, if the perl signal handler
+receives a signal, we now resend the signal to the main perl thread.  Previously
+this would crash.  [L<GH #22487|https://github.com/Perl/perl5/issues/22487>]
+
+=item *
+
+Declaring a lexically scoped array or hash using C<state> within a subroutine
+and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY
+in subroutine exit" error. [L<GH #18630|https://github.com/Perl/perl5/issues/18630>]
+
+=item *
+
+C<builtin::trim()> didn't properly clear C<TARG> which could result in
+out of date cached numeric versions of the value being used on a
+second evaluation.  Properly clear any cached values. [L<GH #22784|https://github.com/Perl/perl5/issues/22784>]
+
+=item *
+
+L<perlfunc/shmread> and L<perlfunc/shmwrite> are no longer limited to 31-bit
+values and can use all the available bits on a platform for their POS and
+SIZE arguments.
+[L<GH #22895|https://github.com/Perl/perl5/issues/22895>]
+
+=item *
+
+L<perlfunc/shmread> is now better behaved if VAR is not a plain string.  If VAR
+is a tied variable, it calls C<STORE> once; previously, it would also call
+C<FETCH>, but without using the result.  If VAR is a reference, the referenced
+entity has its refcount properly decremented when VAR is turned into a string;
+previously, it would leak memory.
+[L<GH #22898|https://github.com/Perl/perl5/issues/22898>]
+
+=item *
+
+The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked
+recursively, either deliberately or by accident, as described in
+L<perlvar/%SIG>. That is, when an exception (or warning) triggers a call to a
+C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or
+warnings) are processed directly, ignoring C<%SIG> until the original
+C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns.
+[L<GH #14527|https://github.com/Perl/perl5/issues/14527>], [L<GH #22984|https://github.com/Perl/perl5/issues/22984>], [L<GH #22987|https://github.com/Perl/perl5/issues/22987>]
+
+=item *
+
+The C<ObjectFIELDS()> for an object and C<xhv_class_fields> for the
+object's stash weren't always NULL or not-NULL, confusing C<sv_dump()>
+(and hence Devel::Peek's C<Dump()>) into crashing on an object with no
+defined fields in some cases.  [L<GH #22959|https://github.com/Perl/perl5/issues/22959>]
+
+=item *
+
+When comparing strings when using a UTF-8 locale, the behavior was
+previously undefined if either or both contained an above-Unicode code
+point, such as 0x110000.  Now all such code points will collate the same
+as the highest Unicode code point, U+10FFFF. [L<GH #22989|https://github.com/Perl/perl5/issues/22989>]
+
+=item *
+
+In regexes, the contents of C<\g{...}> backreferences are now properly
+validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring
+everything after the first number.
+[L<GH #23050|https://github.com/Perl/perl5/issues/23050>]
+
+=item *
+
+A run-time pattern which contained a code block which recursed back to the
+same bit of code which ran that match, could cause a crash.
+[L<GH #22869|https://github.com/Perl/perl5/issues/22869>]
+
+For example:
+
+    my $r = qr/... (?{ foo() if ... }) .../;
+    sub foo { $string =~ $r }
+    foo()
+
+=item *
+
+In some cases an C<eval> would not add integer parts to the source
+lines saved by the debugger. [L<GH #23151|https://github.com/Perl/perl5/issues/23151>]
+
+=item *
+
+In debugging mode, perl saves source lines from all files
+(plus an indication of whether each line is breakable)
+for use by the debugger. The internal storage format has been
+optimized to use less memory.
+This should save 24 bytes per stored line for 64-bit
+systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds.
+Discussed in [L<GH #23171|https://github.com/Perl/perl5/issues/23171>].
+
+=item *
+
+Ensure cloning the save stack for fork emulation doesn't duplicate
+freeing the RExC state. [L<GH #23022|https://github.com/Perl/perl5/issues/23022>]
+
+=item *
+
+Smartmatch against a code reference that uses a loop exit such as
+C<last> would crash perl. [L<GH #16608|https://github.com/Perl/perl5/issues/16608>]
+
+=item *
+
+Class initializers and C<ADJUST> blocks, per L<perlclass>, that
+called C<last> or other loop exits would crash perl.  Same cause as
+for [L<GH #16608|https://github.com/Perl/perl5/issues/16608>].
+
+=item *
+
+Exceptions thrown and caught entirely within a C<defer {}> or C<finally {}>
+block no longer stop the outer run-loop.
+
+Code such as the following would stop running the contents of the C<defer>
+block once the inner exception in the inner C<try>/C<catch> block was caught.
+This has now been fixed, and runs as expected. ([L<GH #23064|https://github.com/Perl/perl5/issues/23064>]).
+
+    defer {
+        try { die "It breaks\n"; }
+        catch ($e) { warn $e }
+
+        say "This line would never run";
+    }
+
+=item *
+
+L<perlfunc/readline> now clears the error flag if an error occurs when
+reading and that error is C<EAGAIN> or C<EWOULDBLOCK>.  This allows
+code that depended on C<readline> to clear all errors to ignore
+these relatively harmless errors.  [L<GH #22883|https://github.com/Perl/perl5/issues/22883>]
+
+=item *
+
+L<C<open>|perlfunc/open> automatically creates an anonymous temporary file
+when passed C<undef> as a filename:
+
+    open(my $fh, "+>", undef) or die ...
+
+This is supposed to work only when the undefined value is the one returned by
+the C<undef> function.
+
+In perls before 5.41.3, this caused a problem due to the fact that the same
+undefined value can be generated by lookups of non-existent hash keys or array
+elements, which can lead to bugs in user-level code (reported as [L<GH #22385|https://github.com/Perl/perl5/issues/22385>]).
+
+In 5.41.3, additional checks based on the syntax tree of the call site were
+added, which fixed this issue for some number of common cases, though not all
+of them, at the cost of breaking the ability of APIs that wrap C<open> to
+expose its anonymous file mode. A notable example of such an API is autodie.
+
+This release reverts to the old problem in preference to the new one for the
+time being.
+
+=back
+
+=head1 Obituaries
+
+=head2 Abe Timmerman
+
+Abe Timmerman (ABELTJE) passed away on August 15, 2024.
+
+Since 2002, Abe built and maintained the L<Test::Smoke> project: "a
+set of scripts and modules that try to run the Perl core tests on as
+many configurations as possible and combine the results into an easy to
+read report". Smoking Perl on as many platforms and configurations as
+possible has been instrumental in finding bugs and developing patches
+for those bugs.
+
+Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA
+Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group
+meetings. With his kindness, his smile and his laugh, he helped make
+Perl and its community better.
+
+Abeltje's memorial card said "Grab every opportunity to have a drink of
+bubbly. This is an opportunity". We'll miss you Abe, and we'll have a
+drink of bubbly in your honor.
+
+=head2 Andrew Main
+
+Andrew Main (ZEFRAM) passed away on March 10, 2025.
+
+Zefram was a brilliant person, seemingly knowledgeable in everything
+and happy to impart his knowledge and share his striking insights with a
+gentle, technical demeanor that often failed to convey the genuine care
+with which he communicated.
+
+It would be impossible to overstate the impact that Zefram has had on
+both the language and culture of Perl over the years. From his countless
+contributions to the code-base, to his often quirky but always distinctive
+appearances at conferences and gatherings, his influence and memory are
+sure to endure long into the future.
+
+Zefram wished to have no designated memorial location in
+meatspace. His designated memorial location in cyberspace is
+L<http://www.fysh.org/~zefram/personal/>.
+
+=head1 Acknowledgements
+
+Perl 5.42.0 represents approximately 13 months of development since Perl
+5.40.0 and contains approximately 280,000 lines of changes across 1,600
+files from 65 authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 94,000 lines of changes to 860 .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.42.0:
+
+Aaron Dill, Andrei Horodniceanu, Andrew Ruthven, Antanas Vaitkus, Aristotle
+Pagaltzis, Branislav Zahradník, brian d foy, Chad Granum, Chris 'BinGOs'
+Williams, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari Mannsåker,
+Dan Book, Daniel Dragan, Dan Jacobson, David Cantrell, David Mitchell, E.
+Choroba, Ed J, Ed Sabol, Elvin Aslanov, Eric Herman, Erik Huelsmann, Gianni
+Ceccarelli, Graham Knop, hbmaclean, H.Merijn Brand, iabyn, James E Keenan,
+James Raspass, Johan Vromans, Karen Etheridge, Karl Williamson, Leon
+Timmermans, Lukas Mai, Marek Rouchal, Marin Tsanov, Mark Fowler, Masahiro
+Honma, Max Maischein, Paul Evans, Paul Johnson, Paul Marquess, Peter
+Eisentraut, Peter John Acklam, Philippe Bruhat (BooK), pyrrhlin, Reini
+Urban, Richard Leach, Robert Rothenberg, Robin Ragged, Russ Allbery, Scott
+Baker, Sergei Zhmylev, Sevan Janiyan, Sisyphus, Štěpán Němec, Steve Hay,
+TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tony Cook, Unicode
+Consortium, Vladimír Marek, Yves Orton.
+
+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 F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database
+at L<https://github.com/Perl/perl5/issues>. There may also be information at
+L<https://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
+for details of how to report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
+you can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Index: gnu/usr.bin/perl/pod/perl5421delta.pod
===================================================================
RCS file: gnu/usr.bin/perl/pod/perl5421delta.pod
diff -N gnu/usr.bin/perl/pod/perl5421delta.pod
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/usr.bin/perl/pod/perl5421delta.pod	29 Mar 2026 16:31:45 -0000
@@ -0,0 +1,209 @@
+=encoding utf8
+
+=head1 NAME
+
+perl5421delta - what is new for perl v5.42.1
+
+=head1 DESCRIPTION
+
+This document describes differences between the 5.42.0 release and the 5.42.1
+release.
+
+If you are upgrading from an earlier release such as 5.40.0, first read
+L<perl5420delta>, which describes differences between 5.40.0 and 5.42.0.
+
+=head1 Incompatible Changes
+
+There are no changes intentionally incompatible with Perl 5.42.0.  If any
+exist, they are bugs, and we request that you submit a report.  See
+L</Reporting Bugs> below.
+
+=head1 Modules and Pragmata
+
+=head2 Updated Modules and Pragmata
+
+=over 4
+
+=item *
+
+L<Module::CoreList> has been upgraded from version 5.20250702 to 5.20260308.
+
+=item *
+
+L<POSIX> has been upgraded from version 2.23 to 2.23_01.
+
+=back
+
+=head1 Documentation
+
+=head2 Changes to Existing Documentation
+
+We have attempted to update the documentation to reflect the changes listed in
+this document.  If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
+
+=head1 Configuration and Compilation
+
+=over 4
+
+=item *
+
+It is now possible to pass to F<Configure> the values dealing with POSIX locale
+categories, overriding its automatic calculation of these.  This enables
+cross-compilation to work.  The easiest way to do this is to extract the C
+program that does the calculation from F<Configure> and then run it on the
+target machine, and then pass the values it outputs to F<Configure> on the
+other machine.  F<Porting/Glossary> has examples.
+[L<GH #22992|https://github.com/Perl/perl5/issues/22992>]
+
+=back
+
+=head1 Testing
+
+Tests were added and changed to reflect the other additions and changes in this
+release.
+
+=head1 Platform Support
+
+=head2 Platform-Specific Notes
+
+=over 4
+
+=item AIX
+
+Thread-safe locale handling has been turned off on all releases due to
+apparent bugs in the underlying operating system support.
+[L<GH #23825|https://github.com/Perl/perl5/issues/23825>]
+
+=item Win32
+
+Fix builds with C<USE_IMP_SYS> defined but C<USE_ITHREADS> not defined.
+
+=back
+
+=head1 Selected Bug Fixes
+
+=over 4
+
+=item *
+
+S<C<use 5.42>> now turns on S<C<use source::encoding "ascii">> for the
+remainder of the line (besides subsequent lines).
+[L<GH #23881|https://github.com/Perl/perl5/issues/23881>]
+
+=item *
+
+Perl 5.42.0 does not handle the transition to/from daylight savings time
+properly.  The time and/or timezone can be off by an hour in the intervals
+surrounding such transitions.  This is a regression from earlier releases, and
+is now fixed.  This bug was evident from perl space in the L<POSIX/strftime>
+function, and in XS code with any of L<perlapi/my_strftime>,
+L<perlapi/sv_strftime_ints>, or L<perlapi/sv_strftime_tm>.
+[L<GH #23878|https://github.com/Perl/perl5/issues/23878>]
+
+=item *
+
+Certain constructs involving a two-variable C<for> loop would crash the perl
+compiler in Perl 5.42.0:
+
+    # Two-variable for loop over a list returned from a method call:
+    for my ($x, $y) (Some::Class->foo()) { ... }
+    for my ($x, $y) ($object->foo()) { ... }
+
+and
+
+    # Two-variable for loop over a list returned from a call to a
+    # lexical(ly imported) subroutine, all inside a lexically scoped
+    # or anonymous subroutine:
+    my sub foo { ... }
+    my $fn = sub {
+        for my ($x, $y) (foo()) { ... }
+    };
+
+    use builtin qw(indexed);  # lexical import!
+    my sub bar {
+        for my ($x, $y) (indexed(...)) { ... }
+    }
+
+These have been fixed.
+[L<GH #23405|https://github.com/Perl/perl5/issues/23405>]
+
+=item *
+
+Since Perl 5.32.0, the second branch of a ternary condition operator wasn't
+getting the correct autovivification context applied.  For example in something
+like
+
+    @{ $cond ? $h{foo} : $h{bar} } = ...;
+
+the first branch would correctly autovivify C<$h{foo}> to an array ref, but the
+second branch might incorrectly autovivify C<$h{bar}> to a hash ref.
+[L<GH #18669|https://github.com/Perl/perl5/issues/18669>].
+
+=back
+
+=head1 Acknowledgements
+
+Perl 5.42.1 represents approximately 8 months of development since Perl 5.42.0
+and contains approximately 7,200 lines of changes across 55 files from 12
+authors.
+
+Excluding auto-generated files, documentation and release tools, there were
+approximately 1,700 lines of changes to 16 .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.42.1:
+
+David Mitchell, Eric Herman, Karen Etheridge, Karl Williamson, Lukas Mai, Max
+Maischein, Philippe Bruhat (BooK), Richard Leach, Steve Hay, Thibault
+Duponchelle, Tony Cook, Yitzchak Scott-Thoennes.
+
+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 F<AUTHORS> file in the Perl source distribution.
+
+=head1 Reporting Bugs
+
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
+L<https://www.perl.org/>, the Perl Home Page.
+
+If you believe you have an unreported bug, please open an issue at
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
+tiny but sufficient test case.
+
+If the bug you are reporting has security implications which make it
+inappropriate to send to a public issue tracker, then see
+L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION> for details of how to
+report the issue.
+
+=head1 Give Thanks
+
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
+
+    perlthanks
+
+This will send an email to the Perl 5 Porters list with your show of thanks.
+
+=head1 SEE ALSO
+
+The F<Changes> file for an explanation of how to view exhaustive details on
+what changed.
+
+The F<INSTALL> file for how to build Perl.
+
+The F<README> file for general stuff.
+
+The F<Artistic> and F<Copying> files for copyright information.
+
+=cut
Index: gnu/usr.bin/perl/pod/perldelta.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perldelta.pod,v
diff -u -p -a -u -p -r1.29 perldelta.pod
--- gnu/usr.bin/perl/pod/perldelta.pod	26 Dec 2025 22:14:21 -0000	1.29
+++ gnu/usr.bin/perl/pod/perldelta.pod	29 Mar 2026 16:31:45 -0000
@@ -2,318 +2,35 @@
 
 =head1 NAME
 
-perldelta - what is new for perl v5.42.0
+perldelta - what is new for perl v5.42.2
 
 =head1 DESCRIPTION
 
-This document describes differences between the 5.42.0 release and the 5.40.0
+This document describes differences between the 5.42.1 release and the 5.42.2
 release.
 
-=head1 Core Enhancements
-
-=head2 More CORE:: subs
-
-C<chdir> has been added as a subroutine to the C<CORE::> namespace.
-
-Previously, code like C<&CORE::chdir($dir)> or C<< my $ref = \&CORE::chdir;
-$ref->($dir) >> would throw an error saying C<&CORE::chdir cannot be called
-directly>. These cases are now fully supported.
-
-=head2 New pragma C<L<source::encoding>>
-
-This allows you to declare that the portion of a program for the
-remainder of the lexical scope of this pragma is encoded either entirely
-in ASCII (for S<C<use source::encoding 'ascii'>>) or if UTF-8 is allowed
-as well (for S<C<use source::encoding 'utf8'>>). No other encodings are
-accepted. The second form is entirely equivalent to S<C<use utf8>>, and
-may be used interchangeably with that.
-
-The purpose of this pragma is to catch cases early where you forgot to
-specify S<C<use utf8>>.
-
-S<C<use source::encoding 'ascii'>> is automatically enabled within the
-lexical scope of a S<C<use v5.41.0>> or higher.
-
-S<C<no source::encoding>> turns off all this checking for the remainder of
-its lexical scope. The meaning of non-ASCII characters is then undefined.
-
-=head2 New C<:writer> attribute on field variables
-
-Classes defined using C<use feature 'class'> are now able to automatically
-create writer accessors for scalar fields, by using the C<:writer> attribute,
-similar to the way that C<:reader> already creates reader accessors.
-
-    class Point {
-        field $x :reader :writer :param;
-        field $y :reader :writer :param;
-    }
-
-    my $p = Point->new( x => 20, y => 40 );
-    $p->set_x(60);
-
-=head2 New C<any> and C<all> operators
-
-Two new experimental features have been added, which introduce the
-list-processing operators C<any> and C<all>.
-
-    use v5.42;
-    use feature 'keyword_all';
-    no warnings 'experimental::keyword_all';
-
-    my @numbers = ...
-
-    if ( all { $_ % 2 == 0 } @numbers ) {
-        say "All the numbers are even";
-    }
-
-These keywords operate similarly to C<grep> except that they only
-ever return true or false, testing if any (or all) of the elements in
-the list make the testing block yield true.  Because of this they can
-short-circuit, avoiding the need to test any further elements if a given
-element determines the eventual result.
-
-These are inspired by the same-named functions in the L<List::Util> module,
-except that they are implemented as direct core operators, and thus perform
-faster, and do not produce an additional subroutine call stack frame for
-invoking the code block.
-
-The feature flags enabling those keywords have been named
-L<C<keyword_any>|feature/"The 'keyword_any' feature">
-and L<C<keyword_all>|feature/"The 'keyword_all' feature">
-to avoid confusion with the ability of the C<feature> module
-to refer to all of its features by using the C<:all>
-export tag.  [L<GH #23104|https://github.com/Perl/perl5/issues/23104>]
-
-The related experimental warning flags are consequently named
-C<experimental::keyword_any> and C<experimental::keyword_all>.
-
-=head2 Apostrophe as a global name separator can be disabled
-
-This was deprecated in Perl 5.38 and removed as scheduled in perl
-5.41.3, but after some discussion has been reinstated by default.
-
-This can be controlled with the C<apostrophe_as_package_separator>
-feature which is enabled by default, but is disabled from the 5.41
-feature bundle onwards.
-
-If you want to disable use within your own code you can explicitly
-disable the feature:
-
-  no feature "apostrophe_as_package_separator";
-
-Note that disabling this feature only prevents use of apostrophe as a
-package separator within code; symbolic references still treat C<'> as
-C<::> with the feature disabled:
-
-  my $symref = "My'Module'Var";
-  # default features
-  my $x = $My'Module'Var; # fine
-  no feature "apostrophe_as_package_separator";
-  no strict "refs";
-  my $y = $$symref;       # like $My::Module::Var
-  my $z = $My'Module'Var; # syntax error
-
-[L<GH #22644|https://github.com/Perl/perl5/issues/22644>]
-
-=head2 Lexical method declaration using C<my method>
-
-Like C<sub> since Perl version 5.18, C<method> can now be prefixed with the
-C<my> keyword.  This declares a subroutine that has lexical, rather than
-package visibility.  See L<perlclass> for more detail.
-
-=head2 Lexical method invocation operator C<< ->& >>
-
-Along with the ability to declare methods lexically, this release also permits
-invoking a lexical subroutine as if it were a method, bypassing the usual
-name-based method resolution.
-
-Combined with lexical method declaration, these two new abilities create the
-effect of having private methods.
-
-=head2 Switch and Smart Match operator kept, behind a feature
-
-The "switch" feature and the smartmatch operator, C<~~>, were introduced in
-v5.10.  Their behavior was significantly changed in v5.10.1.  When the
-"experiment" system was added in v5.18.0, switch and smartmatch were
-retroactively declared experimental.  Over the years, proposals to fix or
-supplement the features have come and gone.
-
-They were deprecated in Perl v5.38.0 and scheduled for removal in
-Perl v5.42.0. After extensive discussion their removal has been indefinitely
-postponed. Using them no longer produces a deprecation warning.
-
-Switch itself still requires the C<switch> feature, which is enabled
-by default for feature bundles from v5.9.5 through to v5.34.  Switch
-remains disabled in feature bundles 5.35 and later, but can be
-separately enabled:
-
-  # no switch here
-  use v5.10;
-  # switch here
-  use v5.36;
-  # no switch here
-  use feature "switch";
-  # switch here
-
-Smart match now requires the C<smartmatch> feature, which is enabled
-by default and included in all feature bundles up to 5.40.  It is
-disabled for the 5.41 feature bundle and later, but can be separately
-enabled:
-
-  # smartmatch here
-  use v5.41;
-  # no smartmatch here
-  use feature "smartmatch";
-  # smartmatch here
-
-[L<GH #22752|https://github.com/Perl/perl5/issues/22752>]
-
-=head2 Unicode 16.0 supported
-
-Perl now supports Unicode 16.0
-L<https://www.unicode.org/versions/Unicode16.0.0/> including the changes
-introduced in 15.1 L<https://www.unicode.org/versions/Unicode15.1.0/>.
-
-=head2 Assigning logical xor C<^^=> operator
-
-Perl 5.40.0 introduced the logical medium-precedence exclusive-or operator
-C<^^>.  It was not noticed at the time that the assigning variant C<^^=> was
-also missing.  This is now added.
+If you are upgrading from an earlier release such as 5.42.0, first read
+L<perl5421delta>, which describes differences between 5.42.0 and 5.42.1.
 
 =head1 Security
 
-=head2 [CVE-2024-56406] Heap buffer overflow vulnerability with tr//
-
-A heap buffer overflow vulnerability was discovered in Perl.
-
-When there are non-ASCII bytes in the left-hand-side of the C<tr> operator,
-C<S_do_trans_invmap()> can overflow the destination pointer C<d>.
+=head2 [CVE-2026-4176] Vulnerability in Compress::Raw::Zlib
 
-  $ perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;'
-  Segmentation fault (core dumped)
+L<Compress::Raw::Zlib> is included in Perl as a dual-life core module, and was
+vulnerable to [L<CVE-2026-3381|https://www.cve.org/CVERecord?id=CVE-2026-3381>]
+due to a vendored version of zlib which had several vulnerabilities, including
+[L<CVE-2026-27171|https://www.cve.org/CVERecord?id=CVE-2026-27171>].
+
+This problem was assigned
+[L<CVE-2026-4176|https://www.cve.org/CVERecord?id=CVE-2026-4176>] by the
+L<CPAN Security Group|https://security.metacpan.org/>.
 
-It is believed that this vulnerability can enable Denial of Service or
-Arbitrary Code Execution attacks on platforms that lack sufficient defenses.
-
-This problem was discovered by Nathan Mills and assigned
-[L<CVE-2024-56406|https://lists.security.metacpan.org/cve-announce/msg/28708725/>]
-by the L<CPAN Security Group|https://security.metacpan.org/>.
-
-The patch to fix this issue (L<87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd|https://github.com/Perl/perl5/commit/87f42aa0e0096e9a346c9672aa3a0bd3bef8c1dd>) is applicable to all perls that are vulnerable, including those
-out-of-support.
-
-=head2 [CVE-2025-40909] Perl threads have a working directory race condition where file operations may target unintended paths
-
-Perl thread cloning had a working directory race condition where file
-operations may target unintended paths. Perl 5.42 will no longer chdir
-to each handle.
-
-This problem was discovered by Vincent Lefèvre via [L<GH #23010|https://github.com/Perl/perl5/issues/23010>]
-and assigned [L<CVE-2025-40909|https://lists.security.metacpan.org/cve-announce/msg/30017499/>]
-by the L<CPAN Security Group|https://security.metacpan.org/>.
-
-Fixes were provided via [L<GH #23019|https://github.com/Perl/perl5/pull/23019>]
-and [L<GH #23361|https://github.com/Perl/perl5/pull/23361>].
 
 =head1 Incompatible Changes
 
-=head2 Removed containing function references for functions without eval
-
-Perl 5.40 reintroduced unconditional references from functions to their
-containing functions to fix a bug introduced in Perl 5.18 that broke the
-special behaviour of C<eval EXPR> in package C<DB> which is used by the
-debugger.
-
-In some cases this change led to circular reference chains between closures and
-other existing references, resulting in memory leaks.
-
-This change has been reverted, fixing
-[L<GH #22547|https://github.com/Perl/perl5/issues/22547>] but re-breaking
-[L<GH #19370|https://github.com/Perl/perl5/issues/19370>].
-
-This means the reference loops won't occur, and that lexical variables and
-functions from enclosing functions may not be visible in the debugger.
-
-Note that calling C<eval EXPR> in a function unconditionally causes a function
-to reference its enclosing functions as it always has.
-
-=head1 Performance Enhancements
-
-=over 4
-
-=item *
-
-Constant-folded strings are now shareable via the Copy-on-Write mechanism.
-[L<GH #22163|https://github.com/Perl/perl5/pull/22163>]
-
-The following code would previously have allocated eleven string buffers,
-each containing one million "A"s:
-
-    my @scalars; push @scalars, ("A" x 1_000_000) for 0..9;
-
-Now a single buffer is allocated and shared between a CONST OP and
-the ten scalar elements of C<@scalars>.
-
-Note that any code using this sort of constant to simulate memory leaks
-(perhaps in test files) must now permute the string in order to trigger
-a string copy and the allocation of separate buffers. For example,
-C<("A" x 1_000_000).time> might be a suitable small change.
-
-=item *
-
-C<tr///> now runs at the same speed regardless of the internal
-representation of its operand, as long as the only characters being
-translated are ASCII-range, for example C<tr/A-Z/a-z/>.  Previously, if
-the internal encoding was UTF-8, a slower, more general implementation
-was used.
-
-=item *
-
-Code that uses the C<indexed> function from the L<builtin> module to generate
-a list of index/value pairs out of an array or list which is then passed into
-a two-variable C<foreach> list to unpack those again is now optimised to be
-more efficient.
-
-    my @array = (...);
-
-    foreach my ($idx, $val) (builtin::indexed @array) {
-        ...
-    }
-
-Z<>
-
-    foreach my ($idx, $val) (builtin::indexed LIST...) {
-        ...
-    }
-
-In particular, a temporary list twice the size of the original is no longer
-generated.  Instead, the loop iterates down the original array or list
-in-place directly, in the same way that C<foreach (@array)> or
-C<foreach (LIST)> would do.
-
-=item *
-
-The peephole optimizer recognises the following zero-offset C<substr> patterns
-and swaps in a new dedicated operator (C<OP_SUBSTR_LEFT>).
-[L<GH #22785|https://github.com/Perl/perl5/issues/22785>]
-
-    substr($x, 0, ...)
-    substr($x, 0, ..., '')
-
-=item *
-
-The stringification of integers by L<perlfunc/print> and L<perlfunc/say>,
-when coming from an C<SVt_IV>, is now more efficient.
-[L<GH #22927|https://github.com/Perl/perl5/issues/22927>]
-
-=item *
-
-String reversal from a single argument, when the string buffer is not
-"swiped", is now done in a single pass and is noticeably faster.
-The extent of the improvement is compiler & hardware dependent.
-[L<GH #23012|https://github.com/Perl/perl5/issues/23012>]
-
-=back
+There are no changes intentionally incompatible with 5.42.1.  If any exist,
+they are bugs, and we request that you submit a report.  See L</Reporting Bugs>
+below.
 
 =head1 Modules and Pragmata
 
@@ -323,1220 +40,73 @@ The extent of the improvement is compile
 
 =item *
 
-L<Archive::Tar> has been upgraded from version 3.02_001 to 3.04.
-
-=item *
-
-L<B::Deparse> has been upgraded from version 1.76 to 1.85.
-
-=item *
-
-L<Benchmark> has been upgraded from version 1.25 to 1.27.
-
-=item *
-
-L<builtin> has been upgraded from version 0.014 to 0.019.
-
-=item *
-
-L<Compress::Raw::Bzip2> has been upgraded from version 2.212 to 2.213.
-
-=item *
-
-L<Compress::Raw::Zlib> has been upgraded from version 2.212 to 2.213.
-
-=item *
-
-L<Config::Perl::V> has been upgraded from version 0.36 to 0.38.
-
-=item *
-
-L<CPAN> has been upgraded from version 2.36 to 2.38.
-
-=item *
-
-L<CPAN::Meta::YAML> has been upgraded from version 0.018 to 0.020.
-
-=item *
-
-L<Data::Dumper> has been upgraded from version 2.189 to 2.192.
-
-=item *
-
-L<DB> has been upgraded from version 1.08 to 1.09.
-
-=item *
-
-L<DBM_Filter> has been upgraded from version 0.06 to 0.07.
-
-=item *
-
-L<Devel::Peek> has been upgraded from version 1.34 to 1.36.
-
-=item *
-
-L<Devel::PPPort> has been upgraded from version 3.72 to 3.73.
-
-=item *
-
-L<Digest::MD5> has been upgraded from version 2.58_01 to 2.59.
-
-=item *
-
-L<DynaLoader> has been upgraded from version 1.56 to 1.57.
-
-=item *
-
-L<experimental> has been upgraded from version 0.032 to 0.035.
-
-=item *
-
-L<Exporter> has been upgraded from version 5.78 to 5.79.
-
-=item *
-
-L<ExtUtils::CBuilder> has been upgraded from version 0.280240 to 0.280242.
-
-=item *
-
-L<ExtUtils::MakeMaker> has been upgraded from version 7.70 to 7.76.
-
-=item *
-
-L<ExtUtils::ParseXS> has been upgraded from version 3.51 to 3.57.
-
-=item *
-
-L<ExtUtils::Typemaps> has been upgraded from version 3.51 to 3.57.
-
-=item *
-
-L<Fcntl> has been upgraded from version 1.18 to 1.20.
-
-=item *
-
-L<feature> has been upgraded from version 1.89 to 1.97.
-
-=item *
-
-L<fields> has been upgraded from version 2.25 to 2.27.
-
-=item *
-
-L<File::Spec> has been upgraded from version 3.90 to 3.94.
-
-=item *
-
-L<Getopt::Long> has been upgraded from version 2.57 to 2.58.
-
-=item *
-
-L<HTTP::Tiny> has been upgraded from version 0.088 to 0.090.
-
-=item *
-
-L<IO::Compress> has been upgraded from version 2.212 to 2.213.
-
-=item *
-
-L<IO::Socket::IP> has been upgraded from version 0.42 to 0.43.
-
-=item *
-
-L<IPC::Open3> has been upgraded from version 1.22 to 1.24.
-
-=item *
-
-L<locale> has been upgraded from version 1.12 to 1.13.
-
-=item *
-
-L<Math::BigInt> has been upgraded from version 2.003002 to 2.005002.
-
-=item *
-
-L<Math::BigInt::FastCalc> has been upgraded from version 0.5018 to 0.5020.
-
-=item *
-
-L<Math::Complex> has been upgraded from version 1.62 to 1.63.
-
-=item *
-
-L<Memoize> has been upgraded from version 1.16 to 1.17.
+L<Compress::Raw::Zlib> has been upgraded from version 2.213 to 2.222.
 
 =item *
 
-L<Module::CoreList> has been upgraded from version 5.20240609 to 5.20250702.
+L<Module::CoreList> has been upgraded from version 5.20260308 to 5.20260329_42.
 
-=item *
-
-L<NDBM_File> has been upgraded from version 1.17 to 1.18.
-
-=item *
-
-L<ODBM_File> has been upgraded from version 1.18 to 1.20.
-
-=item *
-
-L<Opcode> has been upgraded from version 1.65 to 1.69.
-
-=item *
-
-L<overload> has been upgraded from version 1.37 to 1.40.
-
-=item *
-
-L<parent> has been upgraded from version 0.241 to 0.244.
-
-=item *
-
-L<perlfaq> has been upgraded from version 5.20240218 to 5.20250619.
-
-=item *
-
-L<Pod::Usage> has been upgraded from version 2.03 to 2.05.
-
-=item *
-
-L<podlators> has been upgraded from version 5.01_02 to v6.0.2.
-
-=item *
-
-L<POSIX> has been upgraded from version 2.20 to 2.23.
-
-=item *
-
-L<re> has been upgraded from version 0.47 to 0.48.
-
-=item *
-
-L<Safe> has been upgraded from version 2.46 to 2.47.
-
-=item *
-
-L<Scalar::Util> has been upgraded from version 1.63 to 1.68_01.
-
-=item *
-
-L<Search::Dict> has been upgraded from version 1.07 to 1.08.
-
-=item *
-
-L<SelfLoader> has been upgraded from version 1.27 to 1.28.
-
-=item *
-
-L<sort> has been upgraded from version 2.05 to 2.06.
-
-=item *
-
-L<Storable> has been upgraded from version 3.32 to 3.37.
-
-=item *
-
-L<strict> has been upgraded from version 1.13 to 1.14.
-
-=item *
-
-L<Term::Table> has been upgraded from version 0.018 to 0.024.
-
-=item *
-
-L<Test::Harness> has been upgraded from version 3.48 to 3.50.
-
-=item *
+=back
 
-L<Test::Simple> has been upgraded from version 1.302199 to 1.302210.
+=head1 Documentation
 
-=item *
+=head2 Changes to Existing Documentation
 
-L<Thread> has been upgraded from version 3.05 to 3.06.
+We have attempted to update the documentation to reflect the changes listed in
+this document.  If you find any we have missed, open an issue at
+L<https://github.com/Perl/perl5/issues>.
 
-=item *
+=head1 Testing
 
-L<threads> has been upgraded from version 2.40 to 2.43.
-
-=item *
-
-L<threads::shared> has been upgraded from version 1.69 to 1.70.
-
-=item *
-
-L<Tie::File> has been upgraded from version 1.09 to 1.10.
-
-=item *
-
-L<Tie::RefHash> has been upgraded from version 1.40 to 1.41.
-
-=item *
-
-L<Time::HiRes> has been upgraded from version 1.9777 to 1.9778.
-
-=item *
-
-L<Time::Piece> has been upgraded from version 1.3401_01 to 1.36.
-
-=item *
-
-L<Unicode::UCD> has been upgraded from version 0.78 to 0.81.
-
-=item *
-
-L<utf8> has been upgraded from version 1.25 to 1.27.
-
-=item *
-
-L<version> has been upgraded from version 0.9930 to 0.9933.
-
-=item *
-
-L<VMS::Filespec> has been upgraded from version 1.13 to 1.15.
-
-=item *
-
-L<warnings> has been upgraded from version 1.69 to 1.74.
-
-=item *
-
-L<Win32> has been upgraded from version 0.59 to 0.59_01.
-
-=item *
-
-L<XS::APItest> has been upgraded from version 1.36 to 1.43.
-
-=back
-
-=head1 Documentation
-
-=head2 Changes to Existing Documentation
-
-We have attempted to update the documentation to reflect the changes
-listed in this document. If you find any we have missed, open an issue
-at L<https://github.com/Perl/perl5/issues>.
-
-Additionally, the following selected changes have been made:
-
-=head3 L<perlapi>
-
-=over 4
-
-=item *
-
-Combined the documentation for several groups of related functions
-into single entries.
-
-=item *
-
-All forms of C<gv_fetchmeth()> are now documented together.
-
-=item *
-
-C<gv_autoload4> is now documented with C<gv_autoload_pv> and additional notes added.
-The long C<Perl_> forms are now listed when available.
-
-=back
-
-=head3 L<perldata>
-
-=over 4
-
-=item *
-
-Binary and octal floating-point constants (such as C<012.345p-2> and
-C<0b101.11p-1>) are now documented. This feature was first introduced in perl
-5.22.0 together with hexadecimal floating-point constants and had a few bug
-fixes in perl 5.28.0, but it was never formally documented.
-[L<GH #18664|https://github.com/Perl/perl5/issues/18664>]
-
-=back
-
-=head3 L<perlfunc>
-
-=over 4
-
-=item *
-
-Clarified the description of C<ref> and C<reftype> in relation
-to built-in types and class names.
-
-=item *
-
-Clarified that perl C<sort> is stable (and has been since v5.8.0).
-
-=item *
-
-The recommended alternatives to the C<rand()> function were updated to modern modules
-recommended by the L<CPAN Security Group|https://security.metacpan.org/>.
-[L<GH #22873|https://github.com/Perl/perl5/pull/22873>]
-
-=back
-
-=head3 L<perlgov>
-
-=over 4
-
-=item *
-
-The list of Steering Council and Core Team members have been updated, following the conclusion of
-the latest election on 2024-07-17.
-
-=back
-
-=head3 L<perlguts>
-
-=over 4
-
-=item *
-
-Added some description of "real" C<AV>s compared to "fake" C<AV>s.
-
-=item *
-
-Documentation was updated to reflect that mixing C<Newx>, C<Renew>, and
-C<Safefree> vs C<malloc>, C<realloc>, and C<free> are not allowed, and mixing
-pointers between the 2 classes of APIs is not allowed. Updates made in
-L<perlguts> and L<perlclib>.
-
-=item *
-
-Additional caveats have been added to the description of C<TARG>.
-
-=back
-
-=head3 L<perlop>
-
-=over 4
-
-=item *
-
-Portions of perlop are supposed to be ordered so that all the operators
-wth the same precedence are in a single section, and the sections are
-ordered so that the highest precedence operators appear first.
-This ordering has now been restored.  Other reorganization was done to
-improve clarity, with more basic operations described before ones that
-depend on them.
-
-=item *
-
-The documentation for here-docs has been cleaned up and reorganized.
-Indented here-docs were formerly documented separately, now the two
-types have interwoven documentation which is more compact, and easier to
-understand.
-
-=item *
-
-The documentation of the C<xor> operator has been expanded.
-
-=item *
-
-Outdated advice about using relational string operators in UTF-8 locales
-has been removed.  Use L<Unicode::Collate> for the best results, but
-these operators will give adequate results on many platforms.
-
-=item *
-
-Normalized alignment of verbatim sections, fixing how they are displayed by
-some Pod viewers that strip indentation.
-
-=back
-
-=head3 L<perlvar>
-
-=over 4
-
-=item *
-
-Entries for C<$#> and C<$*> have been amended to note that use of them result in a compilation
-error, not a warning.
-
-=back
-
-=head1 Diagnostics
-
-The following additions or changes have been made to diagnostic output,
-including warnings and fatal error messages. For the complete list of
-diagnostic messages, see L<perldiag>.
-
-=head2 New Diagnostics
-
-=head3 New Errors
-
-=over 4
-
-=item *
-
-L<Use of non-ASCII character 0x%X illegal when 'use source::encoding "ascii"' is in effect|perldiag/Use of non-ASCII character 0x%X illegal when 'use source::encoding "ascii"' is in effect>
-
-(F) This pragma forbids non-ASCII characters within its scope.
-
-=item *
-
-L<Undefined subroutine &%s called, close to label '%s'|perldiag/"Undefined subroutine &%s called, close to label '%s'">
-
-(F) The subroutine indicated hasn't been defined, or if it was, it has
-since been undefined.
-
-This error could also indicate a mistyped package separator, when a
-single colon was typed instead of two colons. For example, C<Foo:bar()>
-would be parsed as the label C<Foo> followed by an unqualified function
-name: C<foo: bar()>. [L<GH #22860|https://github.com/Perl/perl5/issues/22860>]
-
-=back
-
-=head3 New Warnings
-
-=over 4
-
-=item *
-
-L<__CLASS__ is experimental|perldiag/"__CLASS__ is experimental">
-
-(S experimental::class) This warning is emitted if you use the C<__CLASS__>
-keyword of C<use feature 'class'>. This keyword is currently
-experimental and its behaviour may change in future releases of Perl.
-
-=item *
-
-L<%s() attempted on handle %s opened with open()|perldiag/"%s() attempted on handle %s opened with open()">
-
-(W io) You called readdir(), telldir(), seekdir(), rewinddir() or
-closedir() on a handle that was opened with open().  If you want to
-use these functions to traverse the contents of a directory, you need
-to open the handle with opendir().
-
-[L<GH #22394|https://github.com/Perl/perl5/issues/22394>]
-
-=item *
-
-L<Possible precedence problem between ! and %s|perldiag/"Possible precedence problem between ! and %s">
-
-(W precedence) You wrote something like
-
-    !$x < $y               # parsed as: (!$x) < $y
-    !$x eq $y              # parsed as: (!$x) eq $y
-    !$x =~ /regex/         # parsed as: (!$x) =~ /regex/
-    !$obj isa Some::Class  # parsed as: (!$obj) isa Some::Class
-
-but because C<!> has higher precedence than comparison operators, C<=~>, and
-C<isa>, this is interpreted as comparing/matching the logical negation of the
-first operand, instead of negating the result of the comparison/match.
-
-To disambiguate, either use a negated comparison/binding operator:
-
-    $x >= $y
-    $x ne $y
-    $x !~ /regex/
-
-... or parentheses:
-
-    !($x < $y)
-    !($x eq $y)
-    !($x =~ /regex/)
-    !($obj isa Some::Class)
-
-... or the low-precedence C<not> operator:
-
-    not $x < $y
-    not $x eq $y
-    not $x =~ /regex/
-    not $obj isa Some::Class
-
-(If you did mean to compare the boolean result of negating the first operand,
-parenthesize as C<< (!$x) < $y >>, C<< (!$x) eq $y >>, etc.)
-
-Note: this warning does not trigger for code like C<!!$x == $y>,
-i.e. where double negation (C<!!>) is used as a convert-to-boolean operator.
-
-=back
-
-=head2 Changes to Existing Diagnostics
-
-=over 4
-
-=item *
-
-L<%s() attempted on invalid dirhandle %s|perldiag/"%s() attempted on invalid dirhandle %s">
-
-This was consolidated from separate messages for readdir(), telldir(),
-seekdir(), rewinddir() and closedir() as part of refactoring for
-[L<GH #22394|https://github.com/Perl/perl5/issues/22394>].
-
-=item *
-
-L<Useless use of %s in void context|perldiag/"Useless use of %s in void context">
-
-This warning now triggers for use of a chained comparison like C<< 0 < $x < 1 >>.
-[L<GH #22969|https://github.com/Perl/perl5/issues/22969>]
-
-=item *
-
-L<Use of uninitialized value%s|perldiag/"Use of uninitialized value%s">
-
-Prevent this warning when accessing a function parameter in C<@_> that
-is an lvalue reference to an untied hash element where the key was
-undefined.  This warning is still produced at the point of call.
-[L<GH #22423|https://github.com/Perl/perl5/issues/22423>]
-
-=back
-
-=head1 Utility Changes
-
-=head2 F<Porting/test-dist-modules.pl>
-
-=over 4
-
-=item *
-
-Separate installation (without overwriting installed modules) is now the default.
-
-=item *
-
-Documentation is significantly enhanced.
-
-=back
-
-=head1 Configuration and Compilation
-
-=over 4
-
-=item *
-
-Fix compilation on platforms (e.g. "Gentoo Prefix") with only a C locale [L<GH #22569|https://github.com/Perl/perl5/issues/22569>]
-Bug first reported downstream L<bugs.gentoo.org/939014|https://bugs.gentoo.org/939014>
-
-=item *
-
-The (mostly undocumented) configuration macro C<PERL_STRICT_CR> has been
-removed. When enabled (e.g. with C<./Configure -A ccflags=-DPERL_STRICT_CR>),
-it would make the perl parser throw a fatal error when it encountered a CR
-(carriage return) character in source files. The default (and now only)
-behavior of the perl parser is to strip CRs paired with newline characters and
-otherwise treat them as whitespace.
-
-(C<PERL_STRICT_CR> was originally introduced in perl 5.005 to optionally
-restore backward compatibility with perl 5.004, which had made CR in source
-files an error. Before that, CR was accepted, but retained literally in quoted
-multi-line constructs such as here-documents, even at the end of a line.)
-
-=item *
-
-Similarly, the (even less documented) configuration macro C<PERL_CR_FILTER> has
-been removed. When enabled, it would install a default source filter to strip
-carriage returns from source code before the parser proper got to see it.
-
-=back
-
-=head1 Testing
-
-Tests were added and changed to reflect the other additions and
-changes in this release.  Furthermore, these significant changes were
-made:
-
-=over 4
-
-=item *
-
-A new F<t/run/todo.t> test script was added as a place for TODO tests
-for known unfixed bugs. Patches are welcome to add to this file.
-
-=item *
-
-Added testing of the perl headers against the C++ compiler
-corresponding to the C compiler perl is being built with.
-[L<GH #22232|https://github.com/Perl/perl5/issues/22232>]
-
-=back
-
-=head1 Platform Support
-
-=head2 Platform-Specific Notes
-
-=over 4
-
-=item arm64 Darwin
-
-Fix arm64 darwin hints when using use64bitall with Configure [L<GH #22672|https://github.com/Perl/perl5/issues/22672>]
-
-=item Android
-
-Changes to F<perl_langinfo.h> for Android [L<GH #22650|https://github.com/Perl/perl5/issues/22650>] related to [L<GH #22627|https://github.com/Perl/perl5/issues/22627>].
-
-=item Cygwin
-
-F<cygwin.c>: fix several silly/terrible C errors. [L<GH #22724|https://github.com/Perl/perl5/issues/22724>]
-
-Supply an explicit base address for C<cygperl*.dll> that cannot
-conflict with those generated by C<--enable-auto-image-base>.  [L<GH #22695|https://github.com/Perl/perl5/issues/22695>][L<GH #22104|https://github.com/Perl/perl5/issues/22104>]
-
-=item MacOS (Darwin)
-
-Collation of strings using locales on MacOS 15 (Darwin 24) and up has
-been turned off due to a failed assertion in its libc.
-
-If earlier versions are also experiencing issues (such as failures in
-F<locale.t>), you can explicitly disable locale collation by adding the
-C<-Accflags=-DNO_LOCALE_COLLATE> option to your invocation of C<./Configure>,
-or just C<-DNO_LOCALE_COLLATE> to the C<ccflags> and C<cppflags>
-variables in F<config.sh>.
-
-=back
-
-=head1 Internal Changes
-
-=over 4
-
-=item *
-
-The L<perlapi/C<sv_strftime_ints>> function is introduced.  This is an
-enhanced version of L<perlapi/C<my_strftime>>, which is retained for
-backwards compatibility.  Both are to call L<strftime(3)> when you have
-the year, month, hour, etc.  The new function handles UTF8ness for you,
-and allows you to specify if you want the possibility of daylight
-savings time to be considered.  C<my_strftime> never considers DST.
-
-=item *
-
-The C<bytes_to_utf8>, C<bytes_from_utf8>, and C<bytes_from_utf8_loc>
-functions are no longer experimental.
-
-=item *
-
-Calls to L<call_argv()|perlapi/call_argv> with the C<G_DISCARD> flag
-set also ensure the SV parameters constructed from the C<argv>
-parameter are released before C<call_argv()> returns. Previously they
-were released on the next L<FREETMPS|perlapi/FREETMPS>. [L<GH #22255|https://github.com/Perl/perl5/issues/22255>]
-
-=item *
-
-When built with the C<-DDEBUGGING> compile option, perl API functions that
-take pointers to distinct types of SVs (AVs, HVs or CVs) will check the
-C<SvTYPE()> of the passed values to ensure they are valid.  Additionally,
-internal code within core functions that attempts to extract AVs, HVs or CVs
-from reference values passed in will also perform such checks.
-
-While this has been entirely tested by normal Perl CI testing, there may
-still be some corner-cases where these constraints are violated in
-otherwise-valid calls.  These may require further investigation if they are
-found, and specific code to be adjusted to account for it.
-
-=item *
-
-The C<op_dump()> function has been expanded to include additional information
-about the recent C<OP_METHSTART> and C<OP_INITFIELD> ops, as well as for
-C<OP_ARGCHECK> and C<OP_ARGELEM> which had not been done previously.
-
-=item *
-
-C<op_dump()> now also has the facility to print extra debugging information
-about custom operators, if those operators register a helper function via the
-new C<xop_dump> element of the C<XOP> structure. For more information, see the
-relevant additions to L<perlguts|perlguts/"Custom Operators">.
-
-=item *
-
-New API functions are introduced to convert strings encoded in UTF-8 to
-their ordinal code point equivalent.  These are safe to use by default,
-and generally more convenient to use than the existing ones.
-
-L<perlapi/C<utf8_to_uv>> and L<perlapi/C<utf8_to_uv_or_die>> replace
-L<perlapi/C<utf8_to_uvchr>> (which is retained for backwards
-compatibility), but you should convert to use the new forms, as likely
-you aren't using the old one safely.
-
-To convert in the opposite direction, you can now use
-L<perlapi/C<uv_to_utf8>>.  This is not a new function, but a new synonym
-for L<perlapi/C<uvchr_to_utf8>>.  It is added so you don't have to learn
-two sets of names.
-
-There are also two new functions, L<perlapi/C<strict_utf8_to_uv>> and
-L<perlapi/C<c9strict_utf8_to_uv>> which do the same thing except when
-the input string represents a code point that Unicode doesn't accept as
-legal for interchange, using either the strict original definition
-(C<strict_utf8_to_uv>), or the looser one given by
-L<Unicode Corrigendum #9|https://www.unicode.org/versions/corrigendum9.html>
-(C<c9strict_utf8_to_uv>).  When the input string represents one of the
-restricted code points, these functions return the Unicode
-C<REPLACEMENT CHARACTER> instead.
-
-Also L<perlapi/C<extended_utf8_to_uv>> is a synonym for C<utf8_to_uv>, for use
-when you want to emphasize that the entire range of Perl extended UTF-8
-is acceptable.
-
-There are also replacement functions for the three more specialized
-conversion functions that you are unlikely to need to use.  Again, the
-old forms are kept for backwards compatibility, but you should convert
-to use the new forms.
-
-L<perlapi/C<utf8_to_uv_flags>> replaces L<perlapi/C<utf8n_to_uvchr>>.
-
-L<perlapi/C<utf8_to_uv_errors>> replaces L<perlapi/C<utf8n_to_uvchr_error>>.
-
-L<perlapi/C<utf8_to_uv_msgs>> replaces
-L<perlapi/C<utf8n_to_uvchr_msgs>>.
-
-Also added are the inverse functions L<perlapi/C<uv_to_utf8_flags>>
-and L<perlapi/C<uv_to_utf8_msgs>>, which are synonyms for the existing
-functions, L<perlapi/C<uvchr_to_utf8_flags>> and
-L<perlapi/C<uvchr_to_utf8_flags_msgs>> respectively.  These are provided only
-so you don't have to learn two sets of names.
-
-=item *
-
-Three new API functions are introduced to convert strings encoded in
-UTF-8 to native bytes format (if possible).  These are easier to use
-than the existing ones, and they avoid unnecessary memory allocations.
-The functions are L<perlapi/C<utf8_to_bytes_overwrite>> which is used
-when it is ok for the input string to be overwritten with the converted
-result; and L<perlapi/C<utf8_to_bytes_new_pv>> and
-L<perlapi/C<utf8_to_bytes_temp_pv>> when the original string must be
-preserved intact.  C<utf8_to_bytes_temp_pv> returns the result in a
-temporary using L<perlapi>/C<SAVEFREEPV> that will automatically be
-destroyed.  With C<utf8_to_bytes_new_pv>, you are responsible for
-freeing the newly allocated memory that is returned if the conversion is
-successful.
-
-The latter two functions are designed to replace
-L<perlapi/C<bytes_from_utf8>> which creates memory unnecessarily, or
-unnecessarily large.
-
-=item *
-
-New API functions L<C<valid_identifier_pve()>|perlapi/valid_identifier_pve>,
-L<C<valid_identifier_pvn()>|perlapi/valid_identifier_pvn> and
-L<C<valid_identifier_sv()>|perlapi/valid_identifier_sv> have been added, which
-test if a string would be considered by Perl to be a valid identifier name.
-
-=item *
-
-When assigning from an SVt_IV into a SVt_NV (or vice versa), providing that
-both are "bodyless" types, Perl_sv_setsv_flags will now just change the
-destination type to match the source type. Previously, an SVt_IV would have
-been upgraded to a SVt_PVNV to store an NV, and an SVt_NV would have been
-upgraded to a SVt_PVIV to store an IV. This change prevents the need to
-allocate - and later free - the relevant body struct.
-
-=item *
-
-Two new API functions are introduced to convert strings encoded in
-native bytes format to UTF-8.  These return the string unchanged if its
-UTF-8 representation is the same as the original.  Otherwise, new memory
-is allocated to contain the converted string.  This is in contrast to
-the existing L<perlapi/C<bytes_to_utf8>> which always allocates new
-memory.  The new functions are L<perlapi/C<bytes_to_utf8_free_me>> and
-L<perlapi/C<bytes_to_utf8_temp_pv>>.
-L<perlapi/C<bytes_to_utf8_temp_pv>> arranges for the new memory to
-automatically be freed.  With C<bytes_to_utf8_free_me>, you are
-responsible for freeing any newly allocated memory.
-
-=item *
-
-The way that subroutine signatures are parsed by the parser grammar has been
-changed.
-
-Previously, when parsing individual signature parameters, the parser would
-accumulate an C<OP_ARGELEM> optree fragment for each parameter on the parser
-stack, collecting them in an C<OP_LIST> sequence, before finally building the
-complete argument handling optree itself, in a large action block defined
-directly in F<perly.y>.
-
-In the new approach, all the optree generation is handled by newly-defined
-functions in F<op.c> which are called by the action blocks in the parser.
-These do not keep state on the parser stack, but instead in a dedicated memory
-structure referenced by the main C<PL_parser> structure.  This is intended to
-be largely opaque to other code, and accessed only via the new functions.
-
-This new arrangement is intended to allow more flexible code generation and
-additional features to be developed in the future.
-
-=item *
-
-Three new API functions have been added to interact with the regexp global
-match position stored in an SV.  These are C<sv_regex_global_pos_get()>,
-C<sv_regex_global_pos_set()> and C<sv_regex_global_pos_clear()>.  Using these
-API functions avoids XS modules needing to know about or interact directly
-with the way this position is currently stored, which involves the
-C<PERL_MAGIC_regex_global> magic type.
-
-=item *
-
-New C<SvVSTRING> API macro
-
-A new API macro has been added, which is used to obtain the second string
-buffer out of a "vstring" SV, in a manner similar to the C<SvPV> macro which
-obtains the regular string buffer out of a regular SV.
-
-    STRLEN len;
-    const char *vstr_pv = SvVSTRING(sv, vstr_len);
-
-See L<perlapi/C<SvVSTRING>>.
-
-=back
-
-=head1 Selected Bug Fixes
-
-=over 4
-
-=item *
-
-Fix null pointer dereference in S_SvREFCNT_dec [L<GH #16627|https://github.com/Perl/perl5/issues/16627>].
-
-=item *
-
-Fix feature 'class' Segmentation fault in DESTROY [L<GH #22278|https://github.com/Perl/perl5/issues/22278>].
-
-=item *
-
-C<chdir> now returns real booleans (as its documentation describes), not
-integers. This means the result of a failed C<chdir> now stringifies to C<''>,
-not C<'0'>.
-
-[L<GH #22365|https://github.com/Perl/perl5/issues/22365>]
-
-=item *
-
-Compound assignment operators return lvalues that can be further modified:
-
-    ($x &= $y) += $z;
-    # Equivalent to:
-    #  $x &= $y;
-    #  $x += $z;
-
-However, the separate numeric/string bitwise operators provided by L<the
-C<bitwise> feature|feature/The 'bitwise' feature>, C<< &= ^= |= &.= ^.= |.= >>,
-did not return such lvalues:
-
-    use feature qw(bitwise);
-    ($x &= $y) += $z;
-    # Used to die:
-    #  Can't modify numeric bitwise and (&) in addition (+) at ...
-
-This has been corrected. [L<GH #22412|https://github.com/Perl/perl5/issues/22412>]
-
-=item *
-
-Starting in v5.39.8, L<POSIX/C<strftime>> would crash or produce odd errors
-(such as C<Out of memory in perl:util:safesysmalloc>) when given a format
-string that wasn't actually a string, but a number, C<undef>, or an object
-(even one with overloaded string conversion).
-
-Now C<strftime> stringifies its first argument, as before.
-[L<GH #22498|https://github.com/Perl/perl5/issues/22498>]
-
-Also, fix C<POSIX::strftime()> [L<GH #22369|https://github.com/Perl/perl5/issues/22369>].
-
-=item *
-
-C<pack("p", ...)> and C<pack("P", ...)> now SvPV_force() the supplied
-SV unless it is read only.  This will remove CoW from the SV and
-prevents code that writes through the generated pointer from modifying
-the value of other SVs that happen the share the same CoWed string
-buffer.
-
-Note: this does not make C<pack("p",... )> safe, if the SV is magical
-then any writes to the buffer will likely be discarded on the next
-read.  [L<GH #22380|https://github.com/Perl/perl5/issues/22380>]
-
-=item *
-
-Enforce C<no feature "bareword_filehandles"> for bareword file handles
-that have strictness removed because they are used in open() with a
-"dup" mode, such as in C<< open my $fh, ">&", THISHANDLE >>. [L<GH #22568|https://github.com/Perl/perl5/issues/22568>]
-
-=item *
-
-Using C<goto> to tail call, or using the call_sv() and related APIs to
-call, any of trim(), refaddr(), reftype(), ceil(), floor() or
-stringify() in the C<builtin::> package would crash or assert due to a
-C<TARG> handling bug. [L<GH #22542|https://github.com/Perl/perl5/issues/22542>]
-
-=item *
-
-Fix sv_gets() to accept a C<SSize_t> append offset instead of C<I32>.
-This prevents integer overflows when appending to a large C<SV> for
-C<readpipe> aka C<qx//> and C<readline>.
-L<https://www.perlmonks.org/?node_id=11161665>
-
-=item *
-
-Fixed an issue where C<utf8n_to_uvchr> failed to correctly identify
-certain invalid UTF-8 sequences as invalid. Specifically, sequences
-that start with continuation bytes or unassigned bytes could cause
-unexpected behavior or a panic. This fix ensures that such invalid
-sequences are now properly detected and handled. This correction
-also resolves related issues in modules that handle UTF-8 processing,
-such as C<Encode.pm>.
-
-=item *
-
-The perl parser would erroneously parse some POD directives
-as if they were C<=cut>. Some other POD directives
-whose names start with I<cut>, prematurely terminating an embedded POD section.
-The following cases were affected: I<cut> followed by a digit (e.g.
-C<=cut2studio>), I<cut> followed by an underscore (e.g. C<=cut_grass>), and in
-string C<eval>, any identifier starting with I<cut> (e.g. C<=cute>).
-[L<GH #22759|https://github.com/Perl/perl5/issues/22759>]
-
-=item *
-
-Builds with C<-msse> and quadmath on 32-bit x86 systems would crash
-with a misaligned access early in the build. [L<GH #22577|https://github.com/Perl/perl5/issues/22577>]
-
-=item *
-
-On threaded builds on POSIX-like systems, if the perl signal handler
-receives a signal, we now resend the signal to the main perl thread.  Previously
-this would crash.  [L<GH #22487|https://github.com/Perl/perl5/issues/22487>]
-
-=item *
-
-Declaring a lexically scoped array or hash using C<state> within a subroutine
-and then immediately returning no longer triggers a "Bizarre copy of HASH/ARRAY
-in subroutine exit" error. [L<GH #18630|https://github.com/Perl/perl5/issues/18630>]
-
-=item *
-
-C<builtin::trim()> didn't properly clear C<TARG> which could result in
-out of date cached numeric versions of the value being used on a
-second evaluation.  Properly clear any cached values. [L<GH #22784|https://github.com/Perl/perl5/issues/22784>]
-
-=item *
-
-L<perlfunc/shmread> and L<perlfunc/shmwrite> are no longer limited to 31-bit
-values and can use all the available bits on a platform for their POS and
-SIZE arguments.
-[L<GH #22895|https://github.com/Perl/perl5/issues/22895>]
-
-=item *
-
-L<perlfunc/shmread> is now better behaved if VAR is not a plain string.  If VAR
-is a tied variable, it calls C<STORE> once; previously, it would also call
-C<FETCH>, but without using the result.  If VAR is a reference, the referenced
-entity has its refcount properly decremented when VAR is turned into a string;
-previously, it would leak memory.
-[L<GH #22898|https://github.com/Perl/perl5/issues/22898>]
-
-=item *
-
-The C<$SIG{__DIE__}> and C<$SIG{__WARN__}> handlers can no longer be invoked
-recursively, either deliberately or by accident, as described in
-L<perlvar/%SIG>. That is, when an exception (or warning) triggers a call to a
-C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler, further exceptions (or
-warnings) are processed directly, ignoring C<%SIG> until the original
-C<$SIG{__DIE__}> (or C<$SIG{__WARN__}>) handler call returns.
-[L<GH #14527|https://github.com/Perl/perl5/issues/14527>], [L<GH #22984|https://github.com/Perl/perl5/issues/22984>], [L<GH #22987|https://github.com/Perl/perl5/issues/22987>]
-
-=item *
-
-The C<ObjectFIELDS()> for an object and C<xhv_class_fields> for the
-object's stash weren't always NULL or not-NULL, confusing C<sv_dump()>
-(and hence Devel::Peek's C<Dump()>) into crashing on an object with no
-defined fields in some cases.  [L<GH #22959|https://github.com/Perl/perl5/issues/22959>]
-
-=item *
-
-When comparing strings when using a UTF-8 locale, the behavior was
-previously undefined if either or both contained an above-Unicode code
-point, such as 0x110000.  Now all such code points will collate the same
-as the highest Unicode code point, U+10FFFF. [L<GH #22989|https://github.com/Perl/perl5/issues/22989>]
-
-=item *
-
-In regexes, the contents of C<\g{...}> backreferences are now properly
-validated. Previously, C<\g{1 FOO}> was silently parsed as C<\g{1}>, ignoring
-everything after the first number.
-[L<GH #23050|https://github.com/Perl/perl5/issues/23050>]
-
-=item *
-
-A run-time pattern which contained a code block which recursed back to the
-same bit of code which ran that match, could cause a crash.
-[L<GH #22869|https://github.com/Perl/perl5/issues/22869>]
-
-For example:
-
-    my $r = qr/... (?{ foo() if ... }) .../;
-    sub foo { $string =~ $r }
-    foo()
-
-=item *
-
-In some cases an C<eval> would not add integer parts to the source
-lines saved by the debugger. [L<GH #23151|https://github.com/Perl/perl5/issues/23151>]
-
-=item *
-
-In debugging mode, perl saves source lines from all files
-(plus an indication of whether each line is breakable)
-for use by the debugger. The internal storage format has been
-optimized to use less memory.
-This should save 24 bytes per stored line for 64-bit
-systems, more for C<-Duselongdouble> or C<-Dusequadmath> builds.
-Discussed in [L<GH #23171|https://github.com/Perl/perl5/issues/23171>].
-
-=item *
-
-Ensure cloning the save stack for fork emulation doesn't duplicate
-freeing the RExC state. [L<GH #23022|https://github.com/Perl/perl5/issues/23022>]
-
-=item *
-
-Smartmatch against a code reference that uses a loop exit such as
-C<last> would crash perl. [L<GH #16608|https://github.com/Perl/perl5/issues/16608>]
-
-=item *
-
-Class initializers and C<ADJUST> blocks, per L<perlclass>, that
-called C<last> or other loop exits would crash perl.  Same cause as
-for [L<GH #16608|https://github.com/Perl/perl5/issues/16608>].
-
-=item *
-
-Exceptions thrown and caught entirely within a C<defer {}> or C<finally {}>
-block no longer stop the outer run-loop.
-
-Code such as the following would stop running the contents of the C<defer>
-block once the inner exception in the inner C<try>/C<catch> block was caught.
-This has now been fixed, and runs as expected. ([L<GH #23064|https://github.com/Perl/perl5/issues/23064>]).
-
-    defer {
-        try { die "It breaks\n"; }
-        catch ($e) { warn $e }
-
-        say "This line would never run";
-    }
-
-=item *
-
-L<perlfunc/readline> now clears the error flag if an error occurs when
-reading and that error is C<EAGAIN> or C<EWOULDBLOCK>.  This allows
-code that depended on C<readline> to clear all errors to ignore
-these relatively harmless errors.  [L<GH #22883|https://github.com/Perl/perl5/issues/22883>]
-
-=item *
-
-L<C<open>|perlfunc/open> automatically creates an anonymous temporary file
-when passed C<undef> as a filename:
-
-    open(my $fh, "+>", undef) or die ...
-
-This is supposed to work only when the undefined value is the one returned by
-the C<undef> function.
-
-In perls before 5.41.3, this caused a problem due to the fact that the same
-undefined value can be generated by lookups of non-existent hash keys or array
-elements, which can lead to bugs in user-level code (reported as [L<GH #22385|https://github.com/Perl/perl5/issues/22385>]).
-
-In 5.41.3, additional checks based on the syntax tree of the call site were
-added, which fixed this issue for some number of common cases, though not all
-of them, at the cost of breaking the ability of APIs that wrap C<open> to
-expose its anonymous file mode. A notable example of such an API is autodie.
-
-This release reverts to the old problem in preference to the new one for the
-time being.
-
-=back
-
-=head1 Obituaries
-
-=head2 Abe Timmerman
-
-Abe Timmerman (ABELTJE) passed away on August 15, 2024.
-
-Since 2002, Abe built and maintained the L<Test::Smoke> project: "a
-set of scripts and modules that try to run the Perl core tests on as
-many configurations as possible and combine the results into an easy to
-read report". Smoking Perl on as many platforms and configurations as
-possible has been instrumental in finding bugs and developing patches
-for those bugs.
-
-Abe was a regular attendee of the Perl Toolchain Summit (née Perl QA
-Hackathon), the Dutch Perl Workshop and the Amsterdam.pm user group
-meetings. With his kindness, his smile and his laugh, he helped make
-Perl and its community better.
-
-Abeltje's memorial card said "Grab every opportunity to have a drink of
-bubbly. This is an opportunity". We'll miss you Abe, and we'll have a
-drink of bubbly in your honor.
-
-=head2 Andrew Main
-
-Andrew Main (ZEFRAM) passed away on March 10, 2025.
-
-Zefram was a brilliant person, seemingly knowledgeable in everything
-and happy to impart his knowledge and share his striking insights with a
-gentle, technical demeanor that often failed to convey the genuine care
-with which he communicated.
-
-It would be impossible to overstate the impact that Zefram has had on
-both the language and culture of Perl over the years. From his countless
-contributions to the code-base, to his often quirky but always distinctive
-appearances at conferences and gatherings, his influence and memory are
-sure to endure long into the future.
-
-Zefram wished to have no designated memorial location in
-meatspace. His designated memorial location in cyberspace is
-L<http://www.fysh.org/~zefram/personal/>.
+Tests were added and changed to reflect the other additions and changes in this
+release.
 
 =head1 Acknowledgements
 
-Perl 5.42.0 represents approximately 13 months of development since Perl
-5.40.0 and contains approximately 280,000 lines of changes across 1,600
-files from 65 authors.
+Perl 5.42.2 represents approximately 3 weeks of development since Perl 5.42.1
+and contains approximately 2,900 lines of changes across 57 files from 6
+authors.
 
 Excluding auto-generated files, documentation and release tools, there were
-approximately 94,000 lines of changes to 860 .pm, .t, .c and .h files.
+approximately 1,900 lines of changes to 23 .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.42.0:
-
-Aaron Dill, Andrei Horodniceanu, Andrew Ruthven, Antanas Vaitkus, Aristotle
-Pagaltzis, Branislav Zahradník, brian d foy, Chad Granum, Chris 'BinGOs'
-Williams, Craig A. Berry, Dabrien 'Dabe' Murphy, Dagfinn Ilmari Mannsåker,
-Dan Book, Daniel Dragan, Dan Jacobson, David Cantrell, David Mitchell, E.
-Choroba, Ed J, Ed Sabol, Elvin Aslanov, Eric Herman, Erik Huelsmann, Gianni
-Ceccarelli, Graham Knop, hbmaclean, H.Merijn Brand, iabyn, James E Keenan,
-James Raspass, Johan Vromans, Karen Etheridge, Karl Williamson, Leon
-Timmermans, Lukas Mai, Marek Rouchal, Marin Tsanov, Mark Fowler, Masahiro
-Honma, Max Maischein, Paul Evans, Paul Johnson, Paul Marquess, Peter
-Eisentraut, Peter John Acklam, Philippe Bruhat (BooK), pyrrhlin, Reini
-Urban, Richard Leach, Robert Rothenberg, Robin Ragged, Russ Allbery, Scott
-Baker, Sergei Zhmylev, Sevan Janiyan, Sisyphus, Štěpán Němec, Steve Hay,
-TAKAI Kousuke, Thibault Duponchelle, Todd Rinaldo, Tony Cook, Unicode
-Consortium, Vladimír Marek, Yves Orton.
-
-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.
+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.42.2:
+
+Eric Herman, James E Keenan, Olaf Alders, Paul Marquess, Richard Leach, Steve
+Hay.
+
+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 F<AUTHORS> file in the Perl source distribution.
+For a more complete list of all of Perl's historical contributors, please see
+the F<AUTHORS> file in the Perl source distribution.
 
 =head1 Reporting Bugs
 
-If you find what you think is a bug, you might check the perl bug database
-at L<https://github.com/Perl/perl5/issues>. There may also be information at
+If you find what you think is a bug, you might check the perl bug database at
+L<https://github.com/Perl/perl5/issues>.  There may also be information at
 L<https://www.perl.org/>, the Perl Home Page.
 
 If you believe you have an unreported bug, please open an issue at
-L<https://github.com/Perl/perl5/issues>. Be sure to trim your bug down to a
+L<https://github.com/Perl/perl5/issues>.  Be sure to trim your bug down to a
 tiny but sufficient test case.
 
 If the bug you are reporting has security implications which make it
-inappropriate to send to a public issue tracker, then see
-L<perlsec/SECURITY VULNERABILITY CONTACT INFORMATION>
-for details of how to report the issue.
+inappropriate to send to a public issue tracker, then see L<perlsec/SECURITY
+VULNERABILITY CONTACT INFORMATION> for details of how to report the issue.
 
 =head1 Give Thanks
 
-If you wish to thank the Perl 5 Porters for the work we had done in Perl 5,
-you can do so by running the C<perlthanks> program:
+If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you
+can do so by running the C<perlthanks> program:
 
     perlthanks
 
Index: gnu/usr.bin/perl/pod/perlhist.pod
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/pod/perlhist.pod,v
diff -u -p -a -u -p -r1.32 perlhist.pod
--- gnu/usr.bin/perl/pod/perlhist.pod	26 Dec 2025 22:14:21 -0000	1.32
+++ gnu/usr.bin/perl/pod/perlhist.pod	29 Mar 2026 16:31:45 -0000
@@ -66,746 +66,782 @@ the strings?).
 
 =head1 THE RECORDS
 
- Pump-  Release         Date            Notes
- kin                                    (by no means
- Holder                                  comprehensive,
-                                         see Changes*
-                                         for details)
+ Pumpkin   Release        Date            Notes
+ Holder                                   (by no means
+                                           comprehensive,
+                                           see Changes*
+                                           for details)
  ======================================================================
 
- Larry   0              Classified.     Don't ask.
+ Larry     0              Classified.     Don't ask.
 
- Larry   1.000          1987-Dec-18
+ Larry     1.000          1987-Dec-18
 
-          1.001..10     1988-Jan-30
-          1.011..14     1988-Feb-02
- Schwern  1.0.15        2002-Dec-18     Modernization
- Richard  1.0_16        2003-Dec-18
-
- Larry   2.000          1988-Jun-05
-
-          2.001         1988-Jun-28
-
- Larry   3.000          1989-Oct-18
-
-          3.001         1989-Oct-26
-          3.002..4      1989-Nov-11
-          3.005         1989-Nov-18
-          3.006..8      1989-Dec-22
-          3.009..13     1990-Mar-02
-          3.014         1990-Mar-13
-          3.015         1990-Mar-14
-          3.016..18     1990-Mar-28
-          3.019..27     1990-Aug-10     User subs.
-          3.028         1990-Aug-14
-          3.029..36     1990-Oct-17
-          3.037         1990-Oct-20
-          3.040         1990-Nov-10
-          3.041         1990-Nov-13
-          3.042..43     1991-Jan-??
-          3.044         1991-Jan-12
-
- Larry   4.000          1991-Mar-21
-
-          4.001..3      1991-Apr-12
-          4.004..9      1991-Jun-07
-          4.010         1991-Jun-10
-          4.011..18     1991-Nov-05
-          4.019         1991-Nov-11     Stable.
-          4.020..33     1992-Jun-08
-          4.034         1992-Jun-11
-          4.035         1992-Jun-23
- Larry    4.036         1993-Feb-05     Very stable.
-
-          5.000alpha1   1993-Jul-31
-          5.000alpha2   1993-Aug-16
-          5.000alpha3   1993-Oct-10
-          5.000alpha4   1993-???-??
-          5.000alpha5   1993-???-??
-          5.000alpha6   1994-Mar-18
-          5.000alpha7   1994-Mar-25
- Andy     5.000alpha8   1994-Apr-04
- Larry    5.000alpha9   1994-May-05     ext appears.
-          5.000alpha10  1994-Jun-11
-          5.000alpha11  1994-Jul-01
- Andy     5.000a11a     1994-Jul-07     To fit 14.
-          5.000a11b     1994-Jul-14
-          5.000a11c     1994-Jul-19
-          5.000a11d     1994-Jul-22
- Larry    5.000alpha12  1994-Aug-04
- Andy     5.000a12a     1994-Aug-08
-          5.000a12b     1994-Aug-15
-          5.000a12c     1994-Aug-22
-          5.000a12d     1994-Aug-22
-          5.000a12e     1994-Aug-22
-          5.000a12f     1994-Aug-24
-          5.000a12g     1994-Aug-24
-          5.000a12h     1994-Aug-24
- Larry    5.000beta1    1994-Aug-30
- Andy     5.000b1a      1994-Sep-06
- Larry    5.000beta2    1994-Sep-14     Core slushified.
- Andy     5.000b2a      1994-Sep-14
-          5.000b2b      1994-Sep-17
-          5.000b2c      1994-Sep-17
- Larry    5.000beta3    1994-Sep-??
- Andy     5.000b3a      1994-Sep-18
-          5.000b3b      1994-Sep-22
-          5.000b3c      1994-Sep-23
-          5.000b3d      1994-Sep-27
-          5.000b3e      1994-Sep-28
-          5.000b3f      1994-Sep-30
-          5.000b3g      1994-Oct-04
- Andy     5.000b3h      1994-Oct-07
- Larry?   5.000gamma    1994-Oct-13?
-
- Larry   5.000          1994-Oct-17
-
- Andy     5.000a        1994-Dec-19
-          5.000b        1995-Jan-18
-          5.000c        1995-Jan-18
-          5.000d        1995-Jan-18
-          5.000e        1995-Jan-18
-          5.000f        1995-Jan-18
-          5.000g        1995-Jan-18
-          5.000h        1995-Jan-18
-          5.000i        1995-Jan-26
-          5.000j        1995-Feb-07
-          5.000k        1995-Feb-11
-          5.000l        1995-Feb-21
-          5.000m        1995-Feb-28
-          5.000n        1995-Mar-07
-          5.000o        1995-Mar-13?
-
- Larry   5.001          1995-Mar-13
-
- Andy     5.001a        1995-Mar-15
-          5.001b        1995-Mar-31
-          5.001c        1995-Apr-07
-          5.001d        1995-Apr-14
-          5.001e        1995-Apr-18     Stable.
-          5.001f        1995-May-31
-          5.001g        1995-May-25
-          5.001h        1995-May-25
-          5.001i        1995-May-30
-          5.001j        1995-Jun-05
-          5.001k        1995-Jun-06
-          5.001l        1995-Jun-06     Stable.
-          5.001m        1995-Jul-02     Very stable.
-          5.001n        1995-Oct-31     Very unstable.
-          5.002beta1    1995-Nov-21
-          5.002b1a      1995-Dec-04
-          5.002b1b      1995-Dec-04
-          5.002b1c      1995-Dec-04
-          5.002b1d      1995-Dec-04
-          5.002b1e      1995-Dec-08
-          5.002b1f      1995-Dec-08
- Tom      5.002b1g      1995-Dec-21     Doc release.
- Andy     5.002b1h      1996-Jan-05
-          5.002b2       1996-Jan-14
- Larry    5.002b3       1996-Feb-02
- Andy     5.002gamma    1996-Feb-11
- Larry    5.002delta    1996-Feb-27
-
- Larry   5.002          1996-Feb-29     Prototypes.
-
- Charles  5.002_01      1996-Mar-25
-
-         5.003          1996-Jun-25     Security release.
-
-          5.003_01      1996-Jul-31
- Nick     5.003_02      1996-Aug-10
- Andy     5.003_03      1996-Aug-28
-          5.003_04      1996-Sep-02
-          5.003_05      1996-Sep-12
-          5.003_06      1996-Oct-07
-          5.003_07      1996-Oct-10
- Chip     5.003_08      1996-Nov-19
-          5.003_09      1996-Nov-26
-          5.003_10      1996-Nov-29
-          5.003_11      1996-Dec-06
-          5.003_12      1996-Dec-19
-          5.003_13      1996-Dec-20
-          5.003_14      1996-Dec-23
-          5.003_15      1996-Dec-23
-          5.003_16      1996-Dec-24
-          5.003_17      1996-Dec-27
-          5.003_18      1996-Dec-31
-          5.003_19      1997-Jan-04
-          5.003_20      1997-Jan-07
-          5.003_21      1997-Jan-15
-          5.003_22      1997-Jan-16
-          5.003_23      1997-Jan-25
-          5.003_24      1997-Jan-29
-          5.003_25      1997-Feb-04
-          5.003_26      1997-Feb-10
-          5.003_27      1997-Feb-18
-          5.003_28      1997-Feb-21
-          5.003_90      1997-Feb-25     Ramping up to the 5.004 release.
-          5.003_91      1997-Mar-01
-          5.003_92      1997-Mar-06
-          5.003_93      1997-Mar-10
-          5.003_94      1997-Mar-22
-          5.003_95      1997-Mar-25
-          5.003_96      1997-Apr-01
-          5.003_97      1997-Apr-03     Fairly widely used.
-          5.003_97a     1997-Apr-05
-          5.003_97b     1997-Apr-08
-          5.003_97c     1997-Apr-10
-          5.003_97d     1997-Apr-13
-          5.003_97e     1997-Apr-15
-          5.003_97f     1997-Apr-17
-          5.003_97g     1997-Apr-18
-          5.003_97h     1997-Apr-24
-          5.003_97i     1997-Apr-25
-          5.003_97j     1997-Apr-28
-          5.003_98      1997-Apr-30
-          5.003_99      1997-May-01
-          5.003_99a     1997-May-09
-          p54rc1        1997-May-12     Release Candidates.
-          p54rc2        1997-May-14
-
- Chip    5.004          1997-May-15     A major maintenance release.
-
- Tim      5.004_01-t1   1997-???-??     The 5.004 maintenance track.
-          5.004_01-t2   1997-Jun-11     aka perl5.004m1t2
-          5.004_01      1997-Jun-13
-          5.004_01_01   1997-Jul-29     aka perl5.004m2t1
-          5.004_01_02   1997-Aug-01     aka perl5.004m2t2
-          5.004_01_03   1997-Aug-05     aka perl5.004m2t3
-          5.004_02      1997-Aug-07
-          5.004_02_01   1997-Aug-12     aka perl5.004m3t1
-          5.004_03-t2   1997-Aug-13     aka perl5.004m3t2
-          5.004_03      1997-Sep-05
-          5.004_04-t1   1997-Sep-19     aka perl5.004m4t1
-          5.004_04-t2   1997-Sep-23     aka perl5.004m4t2
-          5.004_04-t3   1997-Oct-10     aka perl5.004m4t3
-          5.004_04-t4   1997-Oct-14     aka perl5.004m4t4
-          5.004_04      1997-Oct-15
-          5.004_04-m1   1998-Mar-04     (5.004m5t1) Maint. trials for
-                                        5.004_05.
-          5.004_04-m2   1998-May-01
-          5.004_04-m3   1998-May-15
-          5.004_04-m4   1998-May-19
-          5.004_05-MT5  1998-Jul-21
-          5.004_05-MT6  1998-Oct-09
-          5.004_05-MT7  1998-Nov-22
-          5.004_05-MT8  1998-Dec-03
- Chip     5.004_05-MT9  1999-Apr-26
-          5.004_05      1999-Apr-29
-
- Malcolm  5.004_50      1997-Sep-09     The 5.005 development track.
-          5.004_51      1997-Oct-02
-          5.004_52      1997-Oct-15
-          5.004_53      1997-Oct-16
-          5.004_54      1997-Nov-14
-          5.004_55      1997-Nov-25
-          5.004_56      1997-Dec-18
-          5.004_57      1998-Feb-03
-          5.004_58      1998-Feb-06
-          5.004_59      1998-Feb-13
-          5.004_60      1998-Feb-20
-          5.004_61      1998-Feb-27
-          5.004_62      1998-Mar-06
-          5.004_63      1998-Mar-17
-          5.004_64      1998-Apr-03
-          5.004_65      1998-May-15
-          5.004_66      1998-May-29
- Sarathy  5.004_67      1998-Jun-15
-          5.004_68      1998-Jun-23
-          5.004_69      1998-Jun-29
-          5.004_70      1998-Jul-06
-          5.004_71      1998-Jul-09
-          5.004_72      1998-Jul-12
-          5.004_73      1998-Jul-13
-          5.004_74      1998-Jul-14     5.005 beta candidate.
-          5.004_75      1998-Jul-15     5.005 beta1.
-          5.004_76      1998-Jul-21     5.005 beta2.
-
- Sarathy  5.005         1998-Jul-22     Oneperl.
-
- Sarathy  5.005_01      1998-Jul-27     The 5.005 maintenance track.
-          5.005_02-T1   1998-Aug-02
-          5.005_02-T2   1998-Aug-05
-          5.005_02      1998-Aug-08
- Graham   5.005_03-MT1  1998-Nov-30
-          5.005_03-MT2  1999-Jan-04
-          5.005_03-MT3  1999-Jan-17
-          5.005_03-MT4  1999-Jan-26
-          5.005_03-MT5  1999-Jan-28
-          5.005_03-MT6  1999-Mar-05
-          5.005_03      1999-Mar-28
- Leon     5.005_04-RC1  2004-Feb-05
-          5.005_04-RC2  2004-Feb-18
-          5.005_04      2004-Feb-23
-          5.005_05-RC1  2009-Feb-16
-
- Sarathy  5.005_50      1998-Jul-26     The 5.6 development track.
-          5.005_51      1998-Aug-10
-          5.005_52      1998-Sep-25
-          5.005_53      1998-Oct-31
-          5.005_54      1998-Nov-30
-          5.005_55      1999-Feb-16
-          5.005_56      1999-Mar-01
-          5.005_57      1999-May-25
-          5.005_58      1999-Jul-27
-          5.005_59      1999-Aug-02
-          5.005_60      1999-Aug-02
-          5.005_61      1999-Aug-20
-          5.005_62      1999-Oct-15
-          5.005_63      1999-Dec-09
-          5.5.640       2000-Feb-02
-          5.5.650       2000-Feb-08     beta1
-          5.5.660       2000-Feb-22     beta2
-          5.5.670       2000-Feb-29     beta3
-          5.6.0-RC1     2000-Mar-09     Release candidate 1.
-          5.6.0-RC2     2000-Mar-14     Release candidate 2.
-          5.6.0-RC3     2000-Mar-21     Release candidate 3.
-
- Sarathy  5.6.0         2000-Mar-22
-
- Sarathy  5.6.1-TRIAL1  2000-Dec-18     The 5.6 maintenance track.
-          5.6.1-TRIAL2  2001-Jan-31
-          5.6.1-TRIAL3  2001-Mar-19
-          5.6.1-foolish 2001-Apr-01     The "fools-gold" release.
-          5.6.1         2001-Apr-08
- Rafael   5.6.2-RC1     2003-Nov-08
-          5.6.2         2003-Nov-15     Fix new build issues
-
- Jarkko   5.7.0         2000-Sep-02     The 5.7 track: Development.
-          5.7.1         2001-Apr-09
-          5.7.2         2001-Jul-13     Virtual release candidate 0.
-          5.7.3         2002-Mar-05
-          5.8.0-RC1     2002-Jun-01
-          5.8.0-RC2     2002-Jun-21
-          5.8.0-RC3     2002-Jul-13
-
- Jarkko   5.8.0         2002-Jul-18
-
- Jarkko   5.8.1-RC1     2003-Jul-10     The 5.8 maintenance track
-          5.8.1-RC2     2003-Jul-11
-          5.8.1-RC3     2003-Jul-30
-          5.8.1-RC4     2003-Aug-01
-          5.8.1-RC5     2003-Sep-22
-          5.8.1         2003-Sep-25
- Nicholas 5.8.2-RC1     2003-Oct-27
-          5.8.2-RC2     2003-Nov-03
-          5.8.2         2003-Nov-05
-          5.8.3-RC1     2004-Jan-07
-          5.8.3         2004-Jan-14
-          5.8.4-RC1     2004-Apr-05
-          5.8.4-RC2     2004-Apr-15
-          5.8.4         2004-Apr-21
-          5.8.5-RC1     2004-Jul-06
-          5.8.5-RC2     2004-Jul-08
-          5.8.5         2004-Jul-19
-          5.8.6-RC1     2004-Nov-11
-          5.8.6         2004-Nov-27
-          5.8.7-RC1     2005-May-18
-          5.8.7         2005-May-30
-          5.8.8-RC1     2006-Jan-20
-          5.8.8         2006-Jan-31
-          5.8.9-RC1     2008-Nov-10
-          5.8.9-RC2     2008-Dec-06
-          5.8.9         2008-Dec-14
-
- Hugo     5.9.0         2003-Oct-27     The 5.9 development track
- Rafael   5.9.1         2004-Mar-16
-          5.9.2         2005-Apr-01
-          5.9.3         2006-Jan-28
-          5.9.4         2006-Aug-15
-          5.9.5         2007-Jul-07
-          5.10.0-RC1    2007-Nov-17
-          5.10.0-RC2    2007-Nov-25
-
- Rafael   5.10.0        2007-Dec-18
-
- David M  5.10.1-RC1    2009-Aug-06     The 5.10 maintenance track
-          5.10.1-RC2    2009-Aug-18
-          5.10.1        2009-Aug-22
-
- Jesse    5.11.0        2009-Oct-02     The 5.11 development track
-          5.11.1        2009-Oct-20
- Leon     5.11.2        2009-Nov-20
- Jesse    5.11.3        2009-Dec-20
- Ricardo  5.11.4        2010-Jan-20
- Steve    5.11.5        2010-Feb-20
- Jesse    5.12.0-RC0    2010-Mar-21
-          5.12.0-RC1    2010-Mar-29
-          5.12.0-RC2    2010-Apr-01
-          5.12.0-RC3    2010-Apr-02
-          5.12.0-RC4    2010-Apr-06
-          5.12.0-RC5    2010-Apr-09
-
- Jesse    5.12.0        2010-Apr-12
-
- Jesse    5.12.1-RC2    2010-May-13     The 5.12 maintenance track
-          5.12.1-RC1    2010-May-09
-          5.12.1        2010-May-16
-          5.12.2-RC2    2010-Aug-31
-          5.12.2        2010-Sep-06
- Ricardo  5.12.3-RC1    2011-Jan-09
- Ricardo  5.12.3-RC2    2011-Jan-14
- Ricardo  5.12.3-RC3    2011-Jan-17
- Ricardo  5.12.3        2011-Jan-21
- Leon     5.12.4-RC1    2011-Jun-08
- Leon     5.12.4        2011-Jun-20
- Dominic  5.12.5        2012-Nov-10
-
- Leon     5.13.0        2010-Apr-20     The 5.13 development track
- Ricardo  5.13.1        2010-May-20
- Matt     5.13.2        2010-Jun-22
- David G  5.13.3        2010-Jul-20
- Florian  5.13.4        2010-Aug-20
- Steve    5.13.5        2010-Sep-19
- Miyagawa 5.13.6        2010-Oct-20
- BinGOs   5.13.7        2010-Nov-20
- Zefram   5.13.8        2010-Dec-20
- Jesse    5.13.9        2011-Jan-20
- Ævar     5.13.10       2011-Feb-20
- Florian  5.13.11       2011-Mar-20
- Jesse    5.14.0RC1     2011-Apr-20
- Jesse    5.14.0RC2     2011-May-04
- Jesse    5.14.0RC3     2011-May-11
-
- Jesse    5.14.0        2011-May-14     The 5.14 maintenance track
- Jesse    5.14.1        2011-Jun-16
- Florian  5.14.2-RC1    2011-Sep-19
-          5.14.2        2011-Sep-26
- Dominic  5.14.3        2012-Oct-12
- David M  5.14.4-RC1    2013-Mar-05
- David M  5.14.4-RC2    2013-Mar-07
- David M  5.14.4        2013-Mar-10
-
- David G  5.15.0        2011-Jun-20     The 5.15 development track
- Zefram   5.15.1        2011-Jul-20
- Ricardo  5.15.2        2011-Aug-20
- Stevan   5.15.3        2011-Sep-20
- Florian  5.15.4        2011-Oct-20
- Steve    5.15.5        2011-Nov-20
- Dave R   5.15.6        2011-Dec-20
- BinGOs   5.15.7        2012-Jan-20
- Max M    5.15.8        2012-Feb-20
- Abigail  5.15.9        2012-Mar-20
- Ricardo  5.16.0-RC0    2012-May-10
- Ricardo  5.16.0-RC1    2012-May-14
- Ricardo  5.16.0-RC2    2012-May-15
-
- Ricardo  5.16.0        2012-May-20     The 5.16 maintenance track
- Ricardo  5.16.1        2012-Aug-08
- Ricardo  5.16.2        2012-Nov-01
- Ricardo  5.16.3-RC1    2013-Mar-06
- Ricardo  5.16.3        2013-Mar-11
-
- Zefram   5.17.0        2012-May-26     The 5.17 development track
- Jesse L  5.17.1        2012-Jun-20
- TonyC    5.17.2        2012-Jul-20
- Steve    5.17.3        2012-Aug-20
- Florian  5.17.4        2012-Sep-20
- Florian  5.17.5        2012-Oct-20
- Ricardo  5.17.6        2012-Nov-20
- Dave R   5.17.7        2012-Dec-18
- Aaron    5.17.8        2013-Jan-20
- BinGOs   5.17.9        2013-Feb-20
- Max M    5.17.10       2013-Mar-21
- Ricardo  5.17.11       2013-Apr-20
-
- Ricardo  5.18.0-RC1    2013-May-11     The 5.18 maintenance track
- Ricardo  5.18.0-RC2    2013-May-12
- Ricardo  5.18.0-RC3    2013-May-13
- Ricardo  5.18.0-RC4    2013-May-15
- Ricardo  5.18.0        2013-May-18
- Ricardo  5.18.1-RC1    2013-Aug-01
- Ricardo  5.18.1-RC2    2013-Aug-03
- Ricardo  5.18.1-RC3    2013-Aug-08
- Ricardo  5.18.1        2013-Aug-12
- Ricardo  5.18.2        2014-Jan-06
- Ricardo  5.18.3-RC1    2014-Sep-17
- Ricardo  5.18.3-RC2    2014-Sep-27
- Ricardo  5.18.3        2014-Oct-01
- Ricardo  5.18.4        2014-Oct-01
-
- Ricardo   5.19.0       2013-May-20     The 5.19 development track
- David G   5.19.1       2013-Jun-21
- Aristotle 5.19.2       2013-Jul-22
- Steve     5.19.3       2013-Aug-20
- Steve     5.19.4       2013-Sep-20
- Steve     5.19.5       2013-Oct-20
- BinGOs    5.19.6       2013-Nov-20
- Abigail   5.19.7       2013-Dec-20
- Ricardo   5.19.8       2014-Jan-20
- TonyC     5.19.9       2014-Feb-20
- Aaron     5.19.10      2014-Mar-20
- Steve     5.19.11      2014-Apr-20
-
- Ricardo   5.20.0-RC1   2014-May-16     The 5.20 maintenance track
- Ricardo   5.20.0       2014-May-27
- Steve     5.20.1-RC1   2014-Aug-25
- Steve     5.20.1-RC2   2014-Sep-07
- Steve     5.20.1       2014-Sep-14
- Steve     5.20.2-RC1   2015-Jan-31
- Steve     5.20.2       2015-Feb-14
- Steve     5.20.3-RC1   2015-Aug-22
- Steve     5.20.3-RC2   2015-Aug-29
- Steve     5.20.3       2015-Sep-12
-
- Ricardo   5.21.0       2014-May-27     The 5.21 development track
- Matthew H 5.21.1       2014-Jun-20
- Abigail   5.21.2       2014-Jul-20
- Peter     5.21.3       2014-Aug-20
- Steve     5.21.4       2014-Sep-20
- Abigail   5.21.5       2014-Oct-20
- BinGOs    5.21.6       2014-Nov-20
- Max M     5.21.7       2014-Dec-20
- Matthew H 5.21.8       2015-Jan-20
- Sawyer X  5.21.9       2015-Feb-20
- Steve     5.21.10      2015-Mar-20
- Steve     5.21.11      2015-Apr-20
-
- Ricardo   5.22.0-RC1   2015-May-19     The 5.22 maintenance track
- Ricardo   5.22.0-RC2   2015-May-21
- Ricardo   5.22.0       2015-Jun-01
- Steve     5.22.1-RC1   2015-Oct-31
- Steve     5.22.1-RC2   2015-Nov-15
- Steve     5.22.1-RC3   2015-Dec-02
- Steve     5.22.1-RC4   2015-Dec-08
- Steve     5.22.1       2015-Dec-13
- Steve     5.22.2-RC1   2016-Apr-10
- Steve     5.22.2       2016-Apr-29
- Steve     5.22.3-RC1   2016-Jul-17
- Steve     5.22.3-RC2   2016-Jul-25
- Steve     5.22.3-RC3   2016-Aug-11
- Steve     5.22.3-RC4   2016-Oct-12
- Steve     5.22.3-RC5   2017-Jan-02
- Steve     5.22.3       2017-Jan-14
- Steve     5.22.4-RC1   2017-Jul-01
- Steve     5.22.4       2017-Jul-15
-
- Ricardo   5.23.0       2015-Jun-20     The 5.23 development track
- Matthew H 5.23.1       2015-Jul-20
- Matthew H 5.23.2       2015-Aug-20
- Peter     5.23.3       2015-Sep-20
- Steve     5.23.4       2015-Oct-20
- Abigail   5.23.5       2015-Nov-20
- David G   5.23.6       2015-Dec-21
- Stevan    5.23.7       2016-Jan-20
- Sawyer X  5.23.8       2016-Feb-20
- Abigail   5.23.9       2016-Mar-20
-
- Ricardo   5.24.0-RC1   2016-Apr-13     The 5.24 maintenance track
- Ricardo   5.24.0-RC2   2016-Apr-23
- Ricardo   5.24.0-RC3   2016-Apr-26
- Ricardo   5.24.0-RC4   2016-May-02
- Ricardo   5.24.0-RC5   2016-May-04
- Ricardo   5.24.0       2016-May-09
- Steve     5.24.1-RC1   2016-Jul-17
- Steve     5.24.1-RC2   2016-Jul-25
- Steve     5.24.1-RC3   2016-Aug-11
- Steve     5.24.1-RC4   2016-Oct-12
- Steve     5.24.1-RC5   2017-Jan-02
- Steve     5.24.1       2017-Jan-14
- Steve     5.24.2-RC1   2017-Jul-01
- Steve     5.24.2       2017-Jul-15
- Steve     5.24.3-RC1   2017-Sep-10
- Steve     5.24.3       2017-Sep-22
- Steve     5.24.4-RC1   2018-Mar-24
- Steve     5.24.4       2018-Apr-14
-
- Ricardo   5.25.0       2016-May-09     The 5.25 development track
- Sawyer X  5.25.1       2016-May-20
- Matthew H 5.25.2       2016-Jun-20
- Steve     5.25.3       2016-Jul-20
- BinGOs    5.25.4       2016-Aug-20
- Stevan    5.25.5       2016-Sep-20
- Aaron     5.25.6       2016-Oct-20
- Chad      5.25.7       2016-Nov-20
- Sawyer X  5.25.8       2016-Dec-20
- Abigail   5.25.9       2017-Jan-20
- Renee     5.25.10      2017-Feb-20
- Sawyer X  5.25.11      2017-Mar-20
- Sawyer X  5.25.12      2017-Apr-20
-
- Sawyer X  5.26.0-RC1   2017-May-11     The 5.26 maintenance track
- Sawyer X  5.26.0-RC2   2017-May-23
- Sawyer X  5.26.0       2017-May-30
- Steve     5.26.1-RC1   2017-Sep-10
- Steve     5.26.1       2017-Sep-22
- Steve     5.26.2-RC1   2018-Mar-24
- Steve     5.26.2       2018-Apr-14
- Steve     5.26.3-RC1   2018-Nov-08
- Steve     5.26.3       2018-Nov-29
-
- Sawyer X  5.27.0       2017-May-31     The 5.27 development track
- Eric      5.27.1       2017-Jun-20
- Aaron     5.27.2       2017-Jul-20
- Matthew H 5.27.3       2017-Aug-21
- John      5.27.4       2017-Sep-20
- Steve     5.27.5       2017-Oct-20
- Ether     5.27.6       2017-Nov-20
- BinGOs    5.27.7       2017-Dec-20
- Abigail   5.27.8       2018-Jan-20
- Renee     5.27.9       2018-Feb-20
- Todd      5.27.10      2018-Mar-20
- Sawyer X  5.27.11      2018-Apr-20
-
- Sawyer X  5.28.0-RC1   2018-May-21     The 5.28 maintenance track
- Sawyer X  5.28.0-RC2   2018-Jun-06
- Sawyer X  5.28.0-RC3   2018-Jun-18
- Sawyer X  5.28.0-RC4   2018-Jun-19
- Sawyer X  5.28.0       2018-Jun-22
- Steve     5.28.1-RC1   2018-Nov-08
- Steve     5.28.1       2018-Nov-29
- Steve     5.28.2-RC1   2019-Apr-05
- Steve     5.28.2       2019-Apr-19
- Steve     5.28.3-RC1   2020-May-18
- Steve     5.28.3       2020-Jun-01
-
- Sawyer X  5.29.0       2018-Jun-26     The 5.29 development track
- Steve     5.29.1       2018-Jul-20
- BinGOs    5.29.2       2018-Aug-20
- John      5.29.3       2018-Sep-20
- Aaron     5.29.4       2018-Oct-20
- Ether     5.29.5       2018-Nov-20
- Abigail   5.29.6       2018-Dec-18
- Abigail   5.29.7       2019-Jan-20
- Nicolas R 5.29.8       2019-Feb-20
- Zak Elep  5.29.9       2019-Mar-20
- Sawyer X  5.29.10      2019-Apr-20
-
- Sawyer X  5.30.0-RC1   2019-May-11     The 5.30 maintenance track
- Sawyer X  5.30.0-RC2   2019-May-17
- Sawyer X  5.30.0       2019-May-22
- Steve     5.30.1-RC1   2019-Oct-27
- Steve     5.30.1       2019-Nov-10
- Steve     5.30.2-RC1   2020-Feb-29
- Steve     5.30.2       2020-Mar-14
- Steve     5.30.3-RC1   2020-May-18
- Steve     5.30.3       2020-Jun-01
-
- Sawyer X  5.31.0       2019-May-24     The 5.31 development track
- Ether     5.31.1       2019-Jun-20
- Steve     5.31.2       2019-Jul-20
- Tom H     5.31.3       2019-Aug-20
- Max M     5.31.4       2019-Sep-20
- Steve     5.31.5       2019-Oct-20
- BinGOs    5.31.6       2019-Nov-20
- Nicolas R 5.31.7       2019-Dec-20
- Matthew H 5.31.8       2020-Jan-20
- Renee     5.31.9       2020-Feb-20
- Sawyer X  5.31.10      2020-Mar-20
- Sawyer X  5.31.11      2020-Apr-28
-
- Sawyer X  5.32.0-RC0   2020-May-30     The 5.32 maintenance track
- Sawyer X  5.32.0-RC1   2020-Jun-07
- Sawyer X  5.32.0       2020-Jun-20
- Steve     5.32.1-RC1   2021-Jan-09
- Steve     5.32.1       2021-Jan-23
-
- Sawyer X  5.33.0       2020-Jul-17     The 5.33 development track
- Ether     5.33.1       2020-Aug-20
- Sawyer X  5.33.2       2020-Sep-20
- Steve     5.33.3       2020-Oct-20
- Tom H     5.33.4       2020-Nov-20
- Max M     5.33.5       2020-Dec-20
- Richard L 5.33.6       2021-Jan-20
- Renee     5.33.7       2021-Feb-20
- Nicolas R 5.33.8       2021-Mar-20
- Todd R    5.33.9       2021-Apr-20
-
- Sawyer X  5.34.0-RC1   2021-May-04     The 5.34 maintenance track
- Sawyer X  5.34.0-RC2   2021-May-15
- Sawyer X  5.34.0       2021-May-20
- Steve     5.34.1-RC1   2022-Feb-27
- Steve     5.34.1-RC2   2022-Mar-06
- Steve     5.34.1       2022-Mar-13
- Paul E    5.34.2       2023-Nov-25
- Paul E    5.34.3       2023-Nov-29
-
- Ricardo   5.35.0       2021-May-20     The 5.35 development track
- Max       5.35.1       2021-Jun-20
- Neil B    5.35.2       2021-Jul-23
- Ether     5.35.3       2021-Aug-20
- Matthew H 5.35.4       2021-Sep-20
- Leon T    5.35.5       2021-Oct-21
- Richard L 5.35.6       2021-Nov-20
- Neil B    5.35.7       2021-Dec-20
- Nicolas R 5.35.8       2022-Jan-20
- Renee     5.35.9       2022-Feb-20
- Sawyer X  5.35.10      2022-Mar-20
- Steve     5.35.11      2022-Apr-20
-
- Ricardo   5.36.0-RC1   2022-May-20     The 5.36 maintenance track
- Ricardo   5.36.0-RC2   2022-May-20
- Ricardo   5.36.0-RC3   2022-May-22
- Ricardo   5.36.0       2022-May-27
- Steve     5.36.1-RC1   2023-Apr-10
- Steve     5.36.1-RC2   2023-Apr-11
- Steve     5.36.1-RC3   2023-Apr-16
- Steve     5.36.1       2023-Apr-23
- Paul E    5.36.2       2023-Nov-25
- Paul E    5.36.3       2023-Nov-29
-
- Ricardo   5.37.0       2022-May-27     The 5.37 development track
- Matthew H 5.37.1       2022-Jun-20
- Nicolas R 5.37.2       2022-Jul-20
- Neil B    5.37.3       2022-Aug-20
- Ether     5.37.4       2022-Sep-20
- Todd R    5.37.5       2022-Oct-20
- Max M     5.37.6       2022-Nov-20
- Richard L 5.37.7       2022-Dec-20
- Renee     5.37.8       2023-Jan-20
- Ether     5.37.9       2023-Feb-20
- Yves      5.37.10      2023-Mar-20
- Steve     5.37.11      2023-Apr-20
-
- Ricardo   5.38.0-RC1   2023-Jun-15     The 5.38 maintenance track
- Ricardo   5.38.0-RC2   2023-Jun-23
- Ricardo   5.38.0       2023-Jul-02
- Paul E    5.38.1       2023-Nov-25
- Paul E    5.38.2       2023-Nov-29
- Steve     5.38.3-RC1   2025-Jan-05
- Steve     5.38.3       2025-Jan-18
- Steve     5.38.4-RC1   2025-Mar-30
- Steve     5.38.4       2025-Apr-13
-
- Ricardo   5.39.0       2023-Jun-30     The 5.39 development track
- Steve     5.39.1       2023-Jul-20
- Paul E    5.39.2       2023-Aug-20
- Matthew H 5.39.3       2023-Sep-20
- Graham K  5.39.4       2023-Oct-25
- Ether     5.39.5       2023-Nov-20
- Philippe  5.39.6       2023-Dec-30
- Max       5.39.7       2024-Jan-20
- Renee     5.39.8       2024-Feb-23
- Paul E    5.39.9       2024-Mar-20
- Paul E    5.39.10      2024-Apr-29
-
- Graham K  5.40.0-RC1   2024-May-24     The 5.40 maintenance track
- Graham K  5.40.0-RC2   2024-Jun-04
- Graham K  5.40.0       2024-Jun-09
- Steve     5.40.1-RC1   2025-Jan-05
- Steve     5.40.1       2025-Jan-18
- Steve     5.40.2-RC1   2025-Mar-30
- Steve     5.40.2       2025-Apr-13
-
- Graham K  5.41.0       2024-Jun-10     The 5.41 development track
- Philippe  5.41.1       2024-Jul-02
- Ether     5.41.2       2024-Jul-20
- Philippe  5.41.3       2024-Aug-29
- Thibault  5.41.4       2024-Sep-20
- Richard L 5.41.5       2024-Oct-20
- Thibault  5.41.6       2024-Nov-20
- Max       5.41.7       2024-Dec-20
- Steve     5.41.8       2025-Jan-20
- Richard L 5.41.9       2025-Feb-24
- Lukas     5.41.10      2025-Mar-21
- Ether     5.41.11      2025-Apr-20
- Ether     5.41.12      2025-Apr-21
- Philippe  5.41.13      2025-May-28
-
- Thibault  5.42.0-RC1   2025-Jun-24     The 5.42 maintenance track
- Thibault  5.42.0-RC2   2025-Jun-27
- Thibault  5.42.0-RC3   2025-Jul-01
- Philippe  5.42.0       2025-Jul-03
+            1.001..10     1988-Jan-30
+            1.011..14     1988-Feb-02
+ Schwern    1.0.15        2002-Dec-18     Modernization
+ Richard    1.0_16        2003-Dec-18
+
+ Larry     2.000          1988-Jun-05
+
+            2.001         1988-Jun-28
+
+ Larry     3.000          1989-Oct-18
+
+            3.001         1989-Oct-26
+            3.002..4      1989-Nov-11
+            3.005         1989-Nov-18
+            3.006..8      1989-Dec-22
+            3.009..13     1990-Mar-02
+            3.014         1990-Mar-13
+            3.015         1990-Mar-14
+            3.016..18     1990-Mar-28
+            3.019..27     1990-Aug-10     User subs.
+            3.028         1990-Aug-14
+            3.029..36     1990-Oct-17
+            3.037         1990-Oct-20
+            3.040         1990-Nov-10
+            3.041         1990-Nov-13
+            3.042..43     1991-Jan-??
+            3.044         1991-Jan-12
+
+ Larry     4.000          1991-Mar-21
+
+            4.001..3      1991-Apr-12
+            4.004..9      1991-Jun-07
+            4.010         1991-Jun-10
+            4.011..18     1991-Nov-05
+            4.019         1991-Nov-11     Stable.
+            4.020..33     1992-Jun-08
+            4.034         1992-Jun-11
+            4.035         1992-Jun-23
+ Larry      4.036         1993-Feb-05     Very stable.
+
+            5.000alpha1   1993-Jul-31
+            5.000alpha2   1993-Aug-16
+            5.000alpha3   1993-Oct-10
+            5.000alpha4   1993-???-??
+            5.000alpha5   1993-???-??
+            5.000alpha6   1994-Mar-18
+            5.000alpha7   1994-Mar-25
+ Andy       5.000alpha8   1994-Apr-04
+ Larry      5.000alpha9   1994-May-05     ext appears.
+            5.000alpha10  1994-Jun-11
+            5.000alpha11  1994-Jul-01
+ Andy       5.000a11a     1994-Jul-07     To fit 14.
+            5.000a11b     1994-Jul-14
+            5.000a11c     1994-Jul-19
+            5.000a11d     1994-Jul-22
+ Larry      5.000alpha12  1994-Aug-04
+ Andy       5.000a12a     1994-Aug-08
+            5.000a12b     1994-Aug-15
+            5.000a12c     1994-Aug-22
+            5.000a12d     1994-Aug-22
+            5.000a12e     1994-Aug-22
+            5.000a12f     1994-Aug-24
+            5.000a12g     1994-Aug-24
+            5.000a12h     1994-Aug-24
+ Larry      5.000beta1    1994-Aug-30
+ Andy       5.000b1a      1994-Sep-06
+ Larry      5.000beta2    1994-Sep-14     Core slushified.
+ Andy       5.000b2a      1994-Sep-14
+            5.000b2b      1994-Sep-17
+            5.000b2c      1994-Sep-17
+ Larry      5.000beta3    1994-Sep-??
+ Andy       5.000b3a      1994-Sep-18
+            5.000b3b      1994-Sep-22
+            5.000b3c      1994-Sep-23
+            5.000b3d      1994-Sep-27
+            5.000b3e      1994-Sep-28
+            5.000b3f      1994-Sep-30
+            5.000b3g      1994-Oct-04
+ Andy       5.000b3h      1994-Oct-07
+ Larry?     5.000gamma    1994-Oct-13?
+
+ Larry     5.000          1994-Oct-17
+
+ Andy       5.000a        1994-Dec-19
+            5.000b        1995-Jan-18
+            5.000c        1995-Jan-18
+            5.000d        1995-Jan-18
+            5.000e        1995-Jan-18
+            5.000f        1995-Jan-18
+            5.000g        1995-Jan-18
+            5.000h        1995-Jan-18
+            5.000i        1995-Jan-26
+            5.000j        1995-Feb-07
+            5.000k        1995-Feb-11
+            5.000l        1995-Feb-21
+            5.000m        1995-Feb-28
+            5.000n        1995-Mar-07
+            5.000o        1995-Mar-13?
+
+ Larry     5.001          1995-Mar-13
+
+ Andy       5.001a        1995-Mar-15
+            5.001b        1995-Mar-31
+            5.001c        1995-Apr-07
+            5.001d        1995-Apr-14
+            5.001e        1995-Apr-18     Stable.
+            5.001f        1995-May-31
+            5.001g        1995-May-25
+            5.001h        1995-May-25
+            5.001i        1995-May-30
+            5.001j        1995-Jun-05
+            5.001k        1995-Jun-06
+            5.001l        1995-Jun-06     Stable.
+            5.001m        1995-Jul-02     Very stable.
+            5.001n        1995-Oct-31     Very unstable.
+            5.002beta1    1995-Nov-21
+            5.002b1a      1995-Dec-04
+            5.002b1b      1995-Dec-04
+            5.002b1c      1995-Dec-04
+            5.002b1d      1995-Dec-04
+            5.002b1e      1995-Dec-08
+            5.002b1f      1995-Dec-08
+ Tom        5.002b1g      1995-Dec-21     Doc release.
+ Andy       5.002b1h      1996-Jan-05
+            5.002b2       1996-Jan-14
+ Larry      5.002b3       1996-Feb-02
+ Andy       5.002gamma    1996-Feb-11
+ Larry      5.002delta    1996-Feb-27
+
+ Larry     5.002          1996-Feb-29     Prototypes.
+
+ Charles    5.002_01      1996-Mar-25
+
+ Charles   5.003          1996-Jun-25     Security release.
+
+ Charles    5.003_01      1996-Jul-31
+ Nick       5.003_02      1996-Aug-10
+ Andy       5.003_03      1996-Aug-28
+            5.003_04      1996-Sep-02
+            5.003_05      1996-Sep-12
+            5.003_06      1996-Oct-07
+            5.003_07      1996-Oct-10
+ Chip       5.003_08      1996-Nov-19
+            5.003_09      1996-Nov-26
+            5.003_10      1996-Nov-29
+            5.003_11      1996-Dec-06
+            5.003_12      1996-Dec-19
+            5.003_13      1996-Dec-20
+            5.003_14      1996-Dec-23
+            5.003_15      1996-Dec-23
+            5.003_16      1996-Dec-24
+            5.003_17      1996-Dec-27
+            5.003_18      1996-Dec-31
+            5.003_19      1997-Jan-04
+            5.003_20      1997-Jan-07
+            5.003_21      1997-Jan-15
+            5.003_22      1997-Jan-16
+            5.003_23      1997-Jan-25
+            5.003_24      1997-Jan-29
+            5.003_25      1997-Feb-04
+            5.003_26      1997-Feb-10
+            5.003_27      1997-Feb-18
+            5.003_28      1997-Feb-21
+            5.003_90      1997-Feb-25     Ramping up to the 5.004 release.
+            5.003_91      1997-Mar-01
+            5.003_92      1997-Mar-06
+            5.003_93      1997-Mar-10
+            5.003_94      1997-Mar-22
+            5.003_95      1997-Mar-25
+            5.003_96      1997-Apr-01
+            5.003_97      1997-Apr-03     Fairly widely used.
+            5.003_97a     1997-Apr-05
+            5.003_97b     1997-Apr-08
+            5.003_97c     1997-Apr-10
+            5.003_97d     1997-Apr-13
+            5.003_97e     1997-Apr-15
+            5.003_97f     1997-Apr-17
+            5.003_97g     1997-Apr-18
+            5.003_97h     1997-Apr-24
+            5.003_97i     1997-Apr-25
+            5.003_97j     1997-Apr-28
+            5.003_98      1997-Apr-30
+            5.003_99      1997-May-01
+            5.003_99a     1997-May-09
+            p54rc1        1997-May-12     Release Candidates.
+            p54rc2        1997-May-14
+
+ Chip      5.004          1997-May-15     A major maintenance release.
+
+ Tim        5.004_01-t1   1997-???-??     The 5.004 maintenance track.
+            5.004_01-t2   1997-Jun-11     aka perl5.004m1t2
+            5.004_01      1997-Jun-13
+            5.004_01_01   1997-Jul-29     aka perl5.004m2t1
+            5.004_01_02   1997-Aug-01     aka perl5.004m2t2
+            5.004_01_03   1997-Aug-05     aka perl5.004m2t3
+            5.004_02      1997-Aug-07
+            5.004_02_01   1997-Aug-12     aka perl5.004m3t1
+            5.004_03-t2   1997-Aug-13     aka perl5.004m3t2
+            5.004_03      1997-Sep-05
+            5.004_04-t1   1997-Sep-19     aka perl5.004m4t1
+            5.004_04-t2   1997-Sep-23     aka perl5.004m4t2
+            5.004_04-t3   1997-Oct-10     aka perl5.004m4t3
+            5.004_04-t4   1997-Oct-14     aka perl5.004m4t4
+            5.004_04      1997-Oct-15
+            5.004_04-m1   1998-Mar-04     (5.004m5t1) Maint. trials for
+                                          5.004_05.
+            5.004_04-m2   1998-May-01
+            5.004_04-m3   1998-May-15
+            5.004_04-m4   1998-May-19
+            5.004_05-MT5  1998-Jul-21
+            5.004_05-MT6  1998-Oct-09
+            5.004_05-MT7  1998-Nov-22
+            5.004_05-MT8  1998-Dec-03
+ Chip       5.004_05-MT9  1999-Apr-26
+            5.004_05      1999-Apr-29
+
+ Malcolm    5.004_50      1997-Sep-09     The 5.005 development track.
+            5.004_51      1997-Oct-02
+            5.004_52      1997-Oct-15
+            5.004_53      1997-Oct-16
+            5.004_54      1997-Nov-14
+            5.004_55      1997-Nov-25
+            5.004_56      1997-Dec-18
+            5.004_57      1998-Feb-03
+            5.004_58      1998-Feb-06
+            5.004_59      1998-Feb-13
+            5.004_60      1998-Feb-20
+            5.004_61      1998-Feb-27
+            5.004_62      1998-Mar-06
+            5.004_63      1998-Mar-17
+            5.004_64      1998-Apr-03
+            5.004_65      1998-May-15
+            5.004_66      1998-May-29
+ Sarathy    5.004_67      1998-Jun-15
+            5.004_68      1998-Jun-23
+            5.004_69      1998-Jun-29
+            5.004_70      1998-Jul-06
+            5.004_71      1998-Jul-09
+            5.004_72      1998-Jul-12
+            5.004_73      1998-Jul-13
+            5.004_74      1998-Jul-14     5.005 beta candidate.
+            5.004_75      1998-Jul-15     5.005 beta1.
+            5.004_76      1998-Jul-21     5.005 beta2.
+
+ Sarathy   5.005          1998-Jul-22     Oneperl.
+
+ Sarathy    5.005_01      1998-Jul-27     The 5.005 maintenance track.
+            5.005_02-T1   1998-Aug-02
+            5.005_02-T2   1998-Aug-05
+            5.005_02      1998-Aug-08
+ Graham     5.005_03-MT1  1998-Nov-30
+            5.005_03-MT2  1999-Jan-04
+            5.005_03-MT3  1999-Jan-17
+            5.005_03-MT4  1999-Jan-26
+            5.005_03-MT5  1999-Jan-28
+            5.005_03-MT6  1999-Mar-05
+            5.005_03      1999-Mar-28
+ Leon       5.005_04-RC1  2004-Feb-05
+            5.005_04-RC2  2004-Feb-18
+            5.005_04      2004-Feb-23
+            5.005_05-RC1  2009-Feb-16
+
+ Sarathy    5.005_50      1998-Jul-26     The 5.6 development track.
+            5.005_51      1998-Aug-10
+            5.005_52      1998-Sep-25
+            5.005_53      1998-Oct-31
+            5.005_54      1998-Nov-30
+            5.005_55      1999-Feb-16
+            5.005_56      1999-Mar-01
+            5.005_57      1999-May-25
+            5.005_58      1999-Jul-27
+            5.005_59      1999-Aug-02
+            5.005_60      1999-Aug-02
+            5.005_61      1999-Aug-20
+            5.005_62      1999-Oct-15
+            5.005_63      1999-Dec-09
+            5.5.640       2000-Feb-02
+            5.5.650       2000-Feb-08     beta1
+            5.5.660       2000-Feb-22     beta2
+            5.5.670       2000-Feb-29     beta3
+            5.6.0-RC1     2000-Mar-09     Release candidate 1.
+            5.6.0-RC2     2000-Mar-14     Release candidate 2.
+            5.6.0-RC3     2000-Mar-21     Release candidate 3.
+
+ Sarathy   5.6.0          2000-Mar-22
+
+ Sarathy    5.6.1-TRIAL1  2000-Dec-18     The 5.6 maintenance track.
+            5.6.1-TRIAL2  2001-Jan-31
+            5.6.1-TRIAL3  2001-Mar-19
+            5.6.1-foolish 2001-Apr-01     The "fools-gold" release.
+            5.6.1         2001-Apr-08
+ Rafael     5.6.2-RC1     2003-Nov-08
+            5.6.2         2003-Nov-15     Fix new build issues
+
+ Jarkko     5.7.0         2000-Sep-02     The 5.7 track: Development.
+            5.7.1         2001-Apr-09
+            5.7.2         2001-Jul-13     Virtual release candidate 0.
+            5.7.3         2002-Mar-05
+            5.8.0-RC1     2002-Jun-01
+            5.8.0-RC2     2002-Jun-21
+            5.8.0-RC3     2002-Jul-13
+
+ Jarkko    5.8.0          2002-Jul-18
+
+ Jarkko     5.8.1-RC1     2003-Jul-10     The 5.8 maintenance track
+            5.8.1-RC2     2003-Jul-11
+            5.8.1-RC3     2003-Jul-30
+            5.8.1-RC4     2003-Aug-01
+            5.8.1-RC5     2003-Sep-22
+            5.8.1         2003-Sep-25
+ Nicholas   5.8.2-RC1     2003-Oct-27
+            5.8.2-RC2     2003-Nov-03
+            5.8.2         2003-Nov-05
+            5.8.3-RC1     2004-Jan-07
+            5.8.3         2004-Jan-14
+            5.8.4-RC1     2004-Apr-05
+            5.8.4-RC2     2004-Apr-15
+            5.8.4         2004-Apr-21
+            5.8.5-RC1     2004-Jul-06
+            5.8.5-RC2     2004-Jul-08
+            5.8.5         2004-Jul-19
+            5.8.6-RC1     2004-Nov-11
+            5.8.6         2004-Nov-27
+            5.8.7-RC1     2005-May-18
+            5.8.7         2005-May-30
+            5.8.8-RC1     2006-Jan-20
+            5.8.8         2006-Jan-31
+            5.8.9-RC1     2008-Nov-10
+            5.8.9-RC2     2008-Dec-06
+            5.8.9         2008-Dec-14
+
+ Hugo       5.9.0         2003-Oct-27     The 5.9 development track
+ Rafael     5.9.1         2004-Mar-16
+            5.9.2         2005-Apr-01
+            5.9.3         2006-Jan-28
+            5.9.4         2006-Aug-15
+            5.9.5         2007-Jul-07
+            5.10.0-RC1    2007-Nov-17
+            5.10.0-RC2    2007-Nov-25
+
+ Rafael    5.10.0         2007-Dec-18
+
+ David M    5.10.1-RC1    2009-Aug-06     The 5.10 maintenance track
+            5.10.1-RC2    2009-Aug-18
+            5.10.1        2009-Aug-22
+
+ Jesse      5.11.0        2009-Oct-02     The 5.11 development track
+            5.11.1        2009-Oct-20
+ Leon       5.11.2        2009-Nov-20
+ Jesse      5.11.3        2009-Dec-20
+ Ricardo    5.11.4        2010-Jan-20
+ Steve      5.11.5        2010-Feb-20
+ Jesse      5.12.0-RC0    2010-Mar-21
+            5.12.0-RC1    2010-Mar-29
+            5.12.0-RC2    2010-Apr-01
+            5.12.0-RC3    2010-Apr-02
+            5.12.0-RC4    2010-Apr-06
+            5.12.0-RC5    2010-Apr-09
+
+ Jesse     5.12.0         2010-Apr-12
+
+ Jesse      5.12.1-RC1    2010-May-09     The 5.12 maintenance track
+            5.12.1-RC2    2010-May-13
+            5.12.1        2010-May-16
+            5.12.2-RC1    2010-Aug-31
+            5.12.2        2010-Sep-06
+ Ricardo    5.12.3-RC1    2011-Jan-09
+            5.12.3-RC2    2011-Jan-14
+            5.12.3-RC3    2011-Jan-17
+            5.12.3        2011-Jan-21
+ Leon       5.12.4-RC1    2011-Jun-08
+            5.12.4        2011-Jun-20
+ Dominic    5.12.5        2012-Nov-10
+
+ Leon       5.13.0        2010-Apr-20     The 5.13 development track
+ Ricardo    5.13.1        2010-May-20
+ Matt       5.13.2        2010-Jun-22
+ David G    5.13.3        2010-Jul-20
+ Florian    5.13.4        2010-Aug-20
+ Steve      5.13.5        2010-Sep-19
+ Miyagawa   5.13.6        2010-Oct-20
+ BinGOs     5.13.7        2010-Nov-20
+ Zefram     5.13.8        2010-Dec-20
+ Jesse      5.13.9        2011-Jan-20
+ Ævar       5.13.10       2011-Feb-20
+ Florian    5.13.11       2011-Mar-20
+ Jesse      5.14.0-RC1    2011-Apr-20
+            5.14.0-RC2    2011-May-04
+            5.14.0-RC3    2011-May-11
+
+ Jesse     5.14.0         2011-May-14
+
+ Jesse      5.14.1        2011-Jun-16     The 5.14 maintenance track
+ Florian    5.14.2-RC1    2011-Sep-19
+            5.14.2        2011-Sep-26
+ Dominic    5.14.3        2012-Oct-12
+ David M    5.14.4-RC1    2013-Mar-05
+            5.14.4-RC2    2013-Mar-07
+            5.14.4        2013-Mar-10
+
+ David G    5.15.0        2011-Jun-20     The 5.15 development track
+ Zefram     5.15.1        2011-Jul-20
+ Ricardo    5.15.2        2011-Aug-20
+ Stevan     5.15.3        2011-Sep-20
+ Florian    5.15.4        2011-Oct-20
+ Steve      5.15.5        2011-Nov-20
+ Dave R     5.15.6        2011-Dec-20
+ BinGOs     5.15.7        2012-Jan-20
+ Max M      5.15.8        2012-Feb-20
+ Abigail    5.15.9        2012-Mar-20
+ Ricardo    5.16.0-RC0    2012-May-10
+            5.16.0-RC1    2012-May-14
+            5.16.0-RC2    2012-May-15
+
+ Ricardo   5.16.0         2012-May-20
+
+ Ricardo    5.16.1        2012-Aug-08     The 5.16 maintenance track
+            5.16.2        2012-Nov-01
+            5.16.3-RC1    2013-Mar-06
+            5.16.3        2013-Mar-11
+
+ Zefram     5.17.0        2012-May-26     The 5.17 development track
+ Jesse L    5.17.1        2012-Jun-20
+ TonyC      5.17.2        2012-Jul-20
+ Steve      5.17.3        2012-Aug-20
+ Florian    5.17.4        2012-Sep-20
+            5.17.5        2012-Oct-20
+ Ricardo    5.17.6        2012-Nov-20
+ Dave R     5.17.7        2012-Dec-18
+ Aaron      5.17.8        2013-Jan-20
+ BinGOs     5.17.9        2013-Feb-20
+ Max M      5.17.10       2013-Mar-21
+ Ricardo    5.17.11       2013-Apr-20
+            5.18.0-RC1    2013-May-11
+            5.18.0-RC2    2013-May-12
+            5.18.0-RC3    2013-May-13
+            5.18.0-RC4    2013-May-15
+
+ Ricardo   5.18.0         2013-May-18
+
+ Ricardo    5.18.1-RC1    2013-Aug-01     The 5.18 maintenance track
+            5.18.1-RC2    2013-Aug-03
+            5.18.1-RC3    2013-Aug-08
+            5.18.1        2013-Aug-12
+            5.18.2        2014-Jan-06
+            5.18.3-RC1    2014-Sep-17
+            5.18.3-RC2    2014-Sep-27
+            5.18.3        2014-Oct-01
+            5.18.4        2014-Oct-01
+
+ Ricardo    5.19.0       2013-May-20     The 5.19 development track
+ David G    5.19.1       2013-Jun-21
+ Aristotle  5.19.2       2013-Jul-22
+ Steve      5.19.3       2013-Aug-20
+            5.19.4       2013-Sep-20
+            5.19.5       2013-Oct-20
+ BinGOs     5.19.6       2013-Nov-20
+ Abigail    5.19.7       2013-Dec-20
+ Ricardo    5.19.8       2014-Jan-20
+ TonyC      5.19.9       2014-Feb-20
+ Aaron      5.19.10      2014-Mar-20
+ Steve      5.19.11      2014-Apr-20
+ Ricardo    5.20.0-RC1   2014-May-16
+
+ Ricardo   5.20.0        2014-May-27
+
+ Steve      5.20.1-RC1   2014-Aug-25     The 5.20 maintenance track
+            5.20.1-RC2   2014-Sep-07
+            5.20.1       2014-Sep-14
+            5.20.2-RC1   2015-Jan-31
+            5.20.2       2015-Feb-14
+            5.20.3-RC1   2015-Aug-22
+            5.20.3-RC2   2015-Aug-29
+            5.20.3       2015-Sep-12
+
+ Ricardo    5.21.0       2014-May-27     The 5.21 development track
+ Matthew H  5.21.1       2014-Jun-20
+ Abigail    5.21.2       2014-Jul-20
+ Peter      5.21.3       2014-Aug-20
+ Steve      5.21.4       2014-Sep-20
+ Abigail    5.21.5       2014-Oct-20
+ BinGOs     5.21.6       2014-Nov-20
+ Max M      5.21.7       2014-Dec-20
+ Matthew H  5.21.8       2015-Jan-20
+ Sawyer X   5.21.9       2015-Feb-20
+ Steve      5.21.10      2015-Mar-20
+            5.21.11      2015-Apr-20
+ Ricardo    5.22.0-RC1   2015-May-19
+            5.22.0-RC2   2015-May-21
+
+ Ricardo   5.22.0        2015-Jun-01
+
+ Steve      5.22.1-RC1   2015-Oct-31     The 5.22 maintenance track
+            5.22.1-RC2   2015-Nov-15
+            5.22.1-RC3   2015-Dec-02
+            5.22.1-RC4   2015-Dec-08
+            5.22.1       2015-Dec-13
+            5.22.2-RC1   2016-Apr-10
+            5.22.2       2016-Apr-29
+            5.22.3-RC1   2016-Jul-17
+            5.22.3-RC2   2016-Jul-25
+            5.22.3-RC3   2016-Aug-11
+            5.22.3-RC4   2016-Oct-12
+            5.22.3-RC5   2017-Jan-02
+            5.22.3       2017-Jan-14
+            5.22.4-RC1   2017-Jul-01
+            5.22.4       2017-Jul-15
+
+ Ricardo    5.23.0       2015-Jun-20     The 5.23 development track
+ Matthew H  5.23.1       2015-Jul-20
+            5.23.2       2015-Aug-20
+ Peter      5.23.3       2015-Sep-20
+ Steve      5.23.4       2015-Oct-20
+ Abigail    5.23.5       2015-Nov-20
+ David G    5.23.6       2015-Dec-21
+ Stevan     5.23.7       2016-Jan-20
+ Sawyer X   5.23.8       2016-Feb-20
+ Abigail    5.23.9       2016-Mar-20
+ Ricardo    5.24.0-RC1   2016-Apr-13
+            5.24.0-RC2   2016-Apr-23
+            5.24.0-RC3   2016-Apr-26
+            5.24.0-RC4   2016-May-02
+            5.24.0-RC5   2016-May-04
+
+ Ricardo   5.24.0        2016-May-09
+
+ Steve      5.24.1-RC1   2016-Jul-17     The 5.24 maintenance track
+            5.24.1-RC2   2016-Jul-25
+            5.24.1-RC3   2016-Aug-11
+            5.24.1-RC4   2016-Oct-12
+            5.24.1-RC5   2017-Jan-02
+            5.24.1       2017-Jan-14
+            5.24.2-RC1   2017-Jul-01
+            5.24.2       2017-Jul-15
+            5.24.3-RC1   2017-Sep-10
+            5.24.3       2017-Sep-22
+            5.24.4-RC1   2018-Mar-24
+            5.24.4       2018-Apr-14
+
+ Ricardo    5.25.0       2016-May-09     The 5.25 development track
+ Sawyer X   5.25.1       2016-May-20
+ Matthew H  5.25.2       2016-Jun-20
+ Steve      5.25.3       2016-Jul-20
+ BinGOs     5.25.4       2016-Aug-20
+ Stevan     5.25.5       2016-Sep-20
+ Aaron      5.25.6       2016-Oct-20
+ Chad       5.25.7       2016-Nov-20
+ Sawyer X   5.25.8       2016-Dec-20
+ Abigail    5.25.9       2017-Jan-20
+ Renee      5.25.10      2017-Feb-20
+ Sawyer X   5.25.11      2017-Mar-20
+            5.25.12      2017-Apr-20
+            5.26.0-RC1   2017-May-11
+            5.26.0-RC2   2017-May-23
+
+ Sawyer X  5.26.0        2017-May-30
+
+ Steve      5.26.1-RC1   2017-Sep-10     The 5.26 maintenance track
+            5.26.1       2017-Sep-22
+            5.26.2-RC1   2018-Mar-24
+            5.26.2       2018-Apr-14
+            5.26.3-RC1   2018-Nov-08
+            5.26.3       2018-Nov-29
+
+ Sawyer X   5.27.0       2017-May-31     The 5.27 development track
+ Eric       5.27.1       2017-Jun-20
+ Aaron      5.27.2       2017-Jul-20
+ Matthew H  5.27.3       2017-Aug-21
+ John       5.27.4       2017-Sep-20
+ Steve      5.27.5       2017-Oct-20
+ Ether      5.27.6       2017-Nov-20
+ BinGOs     5.27.7       2017-Dec-20
+ Abigail    5.27.8       2018-Jan-20
+ Renee      5.27.9       2018-Feb-20
+ Todd       5.27.10      2018-Mar-20
+ Sawyer X   5.27.11      2018-Apr-20
+            5.28.0-RC1   2018-May-21
+            5.28.0-RC2   2018-Jun-06
+            5.28.0-RC3   2018-Jun-18
+            5.28.0-RC4   2018-Jun-19
+
+ Sawyer X  5.28.0        2018-Jun-22
+
+ Steve      5.28.1-RC1   2018-Nov-08     The 5.28 maintenance track
+            5.28.1       2018-Nov-29
+            5.28.2-RC1   2019-Apr-05
+            5.28.2       2019-Apr-19
+            5.28.3-RC1   2020-May-18
+            5.28.3       2020-Jun-01
+
+ Sawyer X   5.29.0       2018-Jun-26     The 5.29 development track
+ Steve      5.29.1       2018-Jul-20
+ BinGOs     5.29.2       2018-Aug-20
+ John       5.29.3       2018-Sep-20
+ Aaron      5.29.4       2018-Oct-20
+ Ether      5.29.5       2018-Nov-20
+ Abigail    5.29.6       2018-Dec-18
+            5.29.7       2019-Jan-20
+ Nicolas R  5.29.8       2019-Feb-20
+ Zak Elep   5.29.9       2019-Mar-20
+ Sawyer X   5.29.10      2019-Apr-20
+            5.30.0-RC1   2019-May-11
+            5.30.0-RC2   2019-May-17
+
+ Sawyer X  5.30.0        2019-May-22
+
+ Steve      5.30.1-RC1   2019-Oct-27     The 5.30 maintenance track
+            5.30.1       2019-Nov-10
+            5.30.2-RC1   2020-Feb-29
+            5.30.2       2020-Mar-14
+            5.30.3-RC1   2020-May-18
+            5.30.3       2020-Jun-01
+
+ Sawyer X   5.31.0       2019-May-24     The 5.31 development track
+ Ether      5.31.1       2019-Jun-20
+ Steve      5.31.2       2019-Jul-20
+ Tom H      5.31.3       2019-Aug-20
+ Max M      5.31.4       2019-Sep-20
+ Steve      5.31.5       2019-Oct-20
+ BinGOs     5.31.6       2019-Nov-20
+ Nicolas R  5.31.7       2019-Dec-20
+ Matthew H  5.31.8       2020-Jan-20
+ Renee      5.31.9       2020-Feb-20
+ Sawyer X   5.31.10      2020-Mar-20
+            5.31.11      2020-Apr-28
+            5.32.0-RC0   2020-May-30
+            5.32.0-RC1   2020-Jun-07
+
+ Sawyer X  5.32.0        2020-Jun-20
+
+ Steve      5.32.1-RC1   2021-Jan-09     The 5.32 maintenance track
+            5.32.1       2021-Jan-23
+
+ Sawyer X   5.33.0       2020-Jul-17     The 5.33 development track
+ Ether      5.33.1       2020-Aug-20
+ Sawyer X   5.33.2       2020-Sep-20
+ Steve      5.33.3       2020-Oct-20
+ Tom H      5.33.4       2020-Nov-20
+ Max M      5.33.5       2020-Dec-20
+ Richard L  5.33.6       2021-Jan-20
+ Renee      5.33.7       2021-Feb-20
+ Nicolas R  5.33.8       2021-Mar-20
+ Todd R     5.33.9       2021-Apr-20
+ Sawyer X   5.34.0-RC1   2021-May-04
+            5.34.0-RC2   2021-May-15
+
+ Sawyer X  5.34.0        2021-May-20
+
+ Steve      5.34.1-RC1   2022-Feb-27     The 5.34 maintenance track
+            5.34.1-RC2   2022-Mar-06
+            5.34.1       2022-Mar-13
+ Paul E     5.34.2       2023-Nov-25
+            5.34.3       2023-Nov-29
+
+ Ricardo    5.35.0       2021-May-20     The 5.35 development track
+ Max        5.35.1       2021-Jun-20
+ Neil B     5.35.2       2021-Jul-23
+ Ether      5.35.3       2021-Aug-20
+ Matthew H  5.35.4       2021-Sep-20
+ Leon T     5.35.5       2021-Oct-21
+ Richard L  5.35.6       2021-Nov-20
+ Neil B     5.35.7       2021-Dec-20
+ Nicolas R  5.35.8       2022-Jan-20
+ Renee      5.35.9       2022-Feb-20
+ Sawyer X   5.35.10      2022-Mar-20
+ Steve      5.35.11      2022-Apr-20
+ Ricardo    5.36.0-RC1   2022-May-20
+            5.36.0-RC2   2022-May-20
+            5.36.0-RC3   2022-May-22
+
+ Ricardo   5.36.0        2022-May-27
+
+ Steve      5.36.1-RC1   2023-Apr-10     The 5.36 maintenance track
+            5.36.1-RC2   2023-Apr-11
+            5.36.1-RC3   2023-Apr-16
+            5.36.1       2023-Apr-23
+ Paul E     5.36.2       2023-Nov-25
+            5.36.3       2023-Nov-29
+
+ Ricardo    5.37.0       2022-May-27     The 5.37 development track
+ Matthew H  5.37.1       2022-Jun-20
+ Nicolas R  5.37.2       2022-Jul-20
+ Neil B     5.37.3       2022-Aug-20
+ Ether      5.37.4       2022-Sep-20
+ Todd R     5.37.5       2022-Oct-20
+ Max M      5.37.6       2022-Nov-20
+ Richard L  5.37.7       2022-Dec-20
+ Renee      5.37.8       2023-Jan-20
+ Ether      5.37.9       2023-Feb-20
+ Yves       5.37.10      2023-Mar-20
+ Steve      5.37.11      2023-Apr-20
+ Ricardo    5.38.0-RC1   2023-Jun-15
+            5.38.0-RC2   2023-Jun-23
+
+ Ricardo   5.38.0        2023-Jul-02
+
+ Paul E     5.38.1       2023-Nov-25     The 5.38 maintenance track
+            5.38.2       2023-Nov-29
+ Steve      5.38.3-RC1   2025-Jan-05
+            5.38.3       2025-Jan-18
+            5.38.4-RC1   2025-Mar-30
+            5.38.4       2025-Apr-13
+            5.38.5-RC1   2025-Jul-21
+            5.38.5       2025-Aug-03
+
+ Ricardo    5.39.0       2023-Jun-30     The 5.39 development track
+ Steve      5.39.1       2023-Jul-20
+ Paul E     5.39.2       2023-Aug-20
+ Matthew H  5.39.3       2023-Sep-20
+ Graham K   5.39.4       2023-Oct-25
+ Ether      5.39.5       2023-Nov-20
+ Philippe   5.39.6       2023-Dec-30
+ Max        5.39.7       2024-Jan-20
+ Renee      5.39.8       2024-Feb-23
+ Paul E     5.39.9       2024-Mar-20
+            5.39.10      2024-Apr-29
+ Graham K   5.40.0-RC1   2024-May-24
+            5.40.0-RC2   2024-Jun-04
+
+ Graham K  5.40.0        2024-Jun-09
+
+ Steve      5.40.1-RC1   2025-Jan-05     The 5.40 maintenance track
+            5.40.1       2025-Jan-18
+            5.40.2-RC1   2025-Mar-30
+            5.40.2       2025-Apr-13
+            5.40.3-RC1   2025-Jul-21
+            5.40.3       2025-Aug-03
+            5.40.4-RC1   2026-Mar-22
+            5.40.4       2026-Mar-29
+
+ Graham K   5.41.0       2024-Jun-10     The 5.41 development track
+ Philippe   5.41.1       2024-Jul-02
+ Ether      5.41.2       2024-Jul-20
+ Philippe   5.41.3       2024-Aug-29
+ Thibault   5.41.4       2024-Sep-20
+ Richard L  5.41.5       2024-Oct-20
+ Thibault   5.41.6       2024-Nov-20
+ Max        5.41.7       2024-Dec-20
+ Steve      5.41.8       2025-Jan-20
+ Richard L  5.41.9       2025-Feb-24
+ Lukas      5.41.10      2025-Mar-21
+ Ether      5.41.11      2025-Apr-20
+            5.41.12      2025-Apr-21
+ Philippe   5.41.13      2025-May-28
+ Thibault   5.42.0-RC1   2025-Jun-24
+            5.42.0-RC2   2025-Jun-27
+            5.42.0-RC3   2025-Jul-01
+
+ Philippe  5.42.0        2025-Jul-03
+
+ Steve      5.42.1-RC1   2026-Feb-22     The 5.42 maintenance track
+            5.42.1       2026-Mar-08
+            5.42.2-RC1   2026-Mar-22
+            5.42.2       2026-Mar-29
+
+ Philippe   5.43.0       2025-Jul-03     The 5.43 development track
+ Richard L  5.43.1       2025-Jul-20
+ Ether      5.43.2       2025-Aug-20
+ Thibault   5.43.3       2025-Sep-23
+ Eric       5.43.4       2025-Oct-22
+ Thibault   5.43.5       2025-Nov-20
+ Steve      5.43.6       2025-Dec-20
+ Max        5.43.7       2026-Jan-19
+ Richard L  5.43.8       2026-Feb-20
+ Eric       5.43.9       2026-Mar-20
 
 =head2 SELECTED RELEASE SIZES
 
@@ -1244,6 +1280,8 @@ the Perl source distribution for somewha
  win32       1313     65      1326     65      1331     65
  x2p            -      -         -      -         -      -
 
+ ======================================================================
+
                   5.32.0           5.34.0           5.36.0
 
  Configure    588      1       592      1       603      1
@@ -1262,20 +1300,22 @@ the Perl source distribution for somewha
  vos           12      7        12      7         8      7
  win32       1011     47      1001     46       966     45
 
-                  5.38.0
+ ======================================================================
+
+                  5.38.0           5.40.0           5.42.0
 
- Configure    604      1
- Cross        122     15
- h2pl          13     15
- hints        358     83
- os2          538     70
- plan9        322     20
- Porting     1640     80
- qnx            1      4
- utils        606     52
- vms          544     12
- vos            8      7
- win32        982     45
+ Configure    604      1       613      1       613      1
+ Cross        122     15       126     15       126     15
+ h2pl          13     15        24     15        24     15
+ hints        358     83       362     84       362     84
+ os2          538     70       580     70       580     70
+ plan9        322     20       330     20       330     20
+ Porting     1640     80      1660     80      1670     78
+ qnx            1      4         5      4         5      4
+ utils        606     52       773     52       773     52
+ vms          544     12       548     12       547     12
+ vos            8      7        12      7        12      7
+ win32        982     45      1016     47      1025     47
 
 =head2 SELECTED PATCH SIZES
 
Index: gnu/usr.bin/perl/t/class/gh23511.t
===================================================================
RCS file: gnu/usr.bin/perl/t/class/gh23511.t
diff -N gnu/usr.bin/perl/t/class/gh23511.t
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ gnu/usr.bin/perl/t/class/gh23511.t	29 Mar 2026 16:31:45 -0000
@@ -0,0 +1,23 @@
+#!./perl
+
+BEGIN {
+    chdir 't' if -d 't';
+    require './test.pl';
+    set_up_inc('../lib');
+}
+
+use v5.36;
+use feature 'class';
+no warnings 'experimental::class';
+
+# this used to segfault: GH #23511
+eval <<'CLASS';
+class MyTest {
+    $id = 6;
+    field $f1 :reader;
+    field $f2 :writer;
+}
+CLASS
+like $@, qr/^Global symbol "\$id" requires explicit package name /, "we get the expected 'undeclared variable' error";
+
+done_testing;
Index: gnu/usr.bin/perl/t/op/ref.t
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/t/op/ref.t,v
diff -u -p -a -u -p -r1.21 ref.t
--- gnu/usr.bin/perl/t/op/ref.t	28 Jan 2025 01:06:16 -0000	1.21
+++ gnu/usr.bin/perl/t/op/ref.t	29 Mar 2026 16:31:45 -0000
@@ -8,7 +8,7 @@ BEGIN {
 
 use strict qw(refs subs);
 
-plan(257);
+plan(265);
 
 # Test this first before we extend the stack with other operations.
 # This caused an asan failure due to a bad write past the end of the stack.
@@ -911,6 +911,47 @@ EOF
     my @exp = ("0") x $n;
     fresh_perl_is($code, "@exp", { stderr => 1 },
                     'rt#130861: heap uaf in pp_rv2sv');
+}
+
+# GH 18669
+# The correct autovivification lvalue ref context should be propagated to
+# both branches of a ?:. So in something like:
+#    @{  $cond ? $h{a} : $h{b} } = ...;
+# the helem ops on *both* sides of the conditional should get the DREFAV
+# flag set, indicating that if the hash element doesn't exist, it should
+# be autovivified as an *array ref*.
+#
+
+{
+    my $x = { arr => undef };
+    eval {
+        push(@{ $x->{ decide } ? $x->{ not_here } : $x->{ new } }, "mana");
+    };
+
+    is($@, "", "GH 18669: push on non-existent hash ref entry: no errors");
+    is(eval {$x->{new}[0] }, 'mana',
+        "GH 18669: push on non-existent hash ref entry: autovivifies"
+    );
+
+    $x = { arr => undef };
+    eval {
+        push(@{ $x->{ decide } ? $x->{ not_here } : $x->{ arr } }, "mana");
+    };
+
+    is($@, "", "GH 18669: push on undef hash ref entry: no errors");
+    is(eval { $x->{arr}[0] }, 'mana',
+        "GH 18669: push on undef hash ref entry: autovivifies"
+    );
+
+    # try both branches
+    for my $cond (0, 1) {
+        my %h;
+        eval { @{ $cond ? $h{p} : $h{q} } = 99; };
+        is($@, "", "GH 18669: array assign on $cond cond: no errors");
+        is($h{$cond ? 'p' : 'q'}[0], 99,
+            "GH 18669: array assign on $cond cond: autovivifies"
+        );
+    }
 }
 
 # Bit of a hack to make test.pl happy. There are 3 more tests after it leaves.
Index: gnu/usr.bin/perl/t/porting/customized.dat
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/t/porting/customized.dat,v
diff -u -p -a -u -p -r1.27 customized.dat
--- gnu/usr.bin/perl/t/porting/customized.dat	26 Dec 2025 22:15:23 -0000	1.27
+++ gnu/usr.bin/perl/t/porting/customized.dat	29 Mar 2026 16:31:45 -0000
@@ -10,6 +10,7 @@ MIME::Base64 cpan/MIME-Base64/Base64.xs 
 MIME::Base64 cpan/MIME-Base64/lib/MIME/Base64.pm 18e38d197c7c83f96b24f48bef514e93908e6a82
 MIME::Base64 cpan/MIME-Base64/lib/MIME/QuotedPrint.pm 36cbb455ab57b9bbca7e86f50987c8b1df1a8122
 Pod::Perldoc cpan/Pod-Perldoc/lib/Pod/Perldoc.pm d97aa26b722e6e3120b19ee0d7cf9af04dfdfb7f
+Pod::Simple cpan/Pod-Simple/lib/Pod/Simple/HTMLLegacy.pm 2ccd1b70ca64410a8c05c228ff91420355d3d685
 Scalar::Util cpan/Scalar-List-Utils/lib/List/Util.pm 98dbc1cb98d448bd929fe42cf0fc47da978df196
 Scalar::Util cpan/Scalar-List-Utils/lib/List/Util/XS.pm 0e2ef5dcbebb5d808edd4b7adec8f6553cdde916
 Scalar::Util cpan/Scalar-List-Utils/lib/Scalar/Util.pm dddbfb9e26de572f88598cdf06353902718eb2ec
@@ -22,5 +23,5 @@ Win32API::File cpan/Win32API-File/File.p
 Win32API::File cpan/Win32API-File/File.xs beb870fed4490d2faa547b4a8576b8d64d1d27c5
 autodie cpan/autodie/t/utime.t f94c3000b5b23db59df64895594050d7151f8333
 podlators pod/perlpodstyle.pod 3430e61d84673b62944ceed6d023bfd5aebe3847
-version vutil.c 8f1e65848649b125b6e2d3a91d54f5e147d12e41
 version cpan/version/lib/version.pm aa9f25fe6f6815139a9fb85d817b4e2802732c03
+version vutil.c b575383bee2e6bb4eee1b63cfa2d4efa54401e02
Index: gnu/usr.bin/perl/vms/descrip_mms.template
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/vms/descrip_mms.template,v
diff -u -p -a -u -p -r1.17 descrip_mms.template
--- gnu/usr.bin/perl/vms/descrip_mms.template	26 Dec 2025 22:14:22 -0000	1.17
+++ gnu/usr.bin/perl/vms/descrip_mms.template	29 Mar 2026 16:31:45 -0000
@@ -298,7 +298,7 @@ utils : $(utils1) $(utils2) $(utils3) $(
 extra.pods : miniperl
 	@ @extra_pods.com
 
-PERLDELTA_CURRENT = [.pod]perl5420delta.pod
+PERLDELTA_CURRENT = [.pod]perl5422delta.pod
 
 $(PERLDELTA_CURRENT) : [.pod]perldelta.pod
 	Copy/NoConfirm/Log $(MMS$SOURCE) $(PERLDELTA_CURRENT)
Index: gnu/usr.bin/perl/win32/GNUmakefile
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/GNUmakefile,v
diff -u -p -a -u -p -r1.32 GNUmakefile
--- gnu/usr.bin/perl/win32/GNUmakefile	26 Dec 2025 22:16:26 -0000	1.32
+++ gnu/usr.bin/perl/win32/GNUmakefile	29 Mar 2026 16:31:45 -0000
@@ -63,7 +63,7 @@ INST_TOP := $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER	:= \5.42.0
+#INST_VER	:= \5.42.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1644,7 +1644,7 @@ utils: $(HAVEMINIPERL) ..\utils\Makefile
 	copy ..\README.tw       ..\pod\perltw.pod
 	copy ..\README.vos      ..\pod\perlvos.pod
 	copy ..\README.win32    ..\pod\perlwin32.pod
-	copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod
+	copy ..\pod\perldelta.pod ..\pod\perl5422delta.pod
 	$(MINIPERL) -I..\lib $(PL2BAT) $(UTILS)
 	$(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" ..
 	$(MINIPERL) -I..\lib ..\pod\perlmodlib.PL -q ..
@@ -1745,7 +1745,7 @@ distclean: realclean
 	-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
 	-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
 	-cd $(PODDIR) && del /f *.html *.bat roffitall \
-	    perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+	    perl5422delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
 	    perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
 	    perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
 	    perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
Index: gnu/usr.bin/perl/win32/Makefile
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/Makefile,v
diff -u -p -a -u -p -r1.57 Makefile
--- gnu/usr.bin/perl/win32/Makefile	26 Dec 2025 22:16:26 -0000	1.57
+++ gnu/usr.bin/perl/win32/Makefile	29 Mar 2026 16:31:45 -0000
@@ -37,7 +37,7 @@ INST_TOP	= $(INST_DRV)\perl
 # versioned installation can be obtained by setting INST_TOP above to a
 # path that includes an arbitrary version string.
 #
-#INST_VER	= \5.42.0
+#INST_VER	= \5.42.2
 
 #
 # Comment this out if you DON'T want your perl installation to have
@@ -1171,7 +1171,7 @@ utils: $(PERLEXE) ..\utils\Makefile
 	copy ..\README.tw       ..\pod\perltw.pod
 	copy ..\README.vos      ..\pod\perlvos.pod
 	copy ..\README.win32    ..\pod\perlwin32.pod
-	copy ..\pod\perldelta.pod ..\pod\perl5420delta.pod
+	copy ..\pod\perldelta.pod ..\pod\perl5422delta.pod
 	cd ..\win32
 	$(PERLEXE) $(PL2BAT) $(UTILS)
 	$(MINIPERL) -I..\lib ..\autodoc.pl -c "win32\$(CONFIG_H)" ..
@@ -1273,7 +1273,7 @@ distclean: realclean
 	-if exist $(LIBDIR)\Win32API rmdir /s /q $(LIBDIR)\Win32API
 	-if exist $(LIBDIR)\XS rmdir /s /q $(LIBDIR)\XS
 	-cd $(PODDIR) && del /f *.html *.bat roffitall \
-	    perl5420delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
+	    perl5422delta.pod perlaix.pod perlamiga.pod perlandroid.pod \
 	    perlapi.pod perlbs2000.pod perlcn.pod perlcygwin.pod \
 	    perlfreebsd.pod perlhaiku.pod perlhpux.pod perlhurd.pod \
 	    perlintern.pod perlirix.pod perljp.pod perlko.pod perllinux.pod \
Index: gnu/usr.bin/perl/win32/perllib.c
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/perllib.c,v
diff -u -p -a -u -p -r1.18 perllib.c
--- gnu/usr.bin/perl/win32/perllib.c	26 Dec 2025 22:14:22 -0000	1.18
+++ gnu/usr.bin/perl/win32/perllib.c	29 Mar 2026 16:31:45 -0000
@@ -51,6 +51,7 @@ xs_init(pTHX)
 void
 win32_checkTLS(PerlInterpreter *host_perl)
 {
+#ifdef USE_ITHREADS
 /* GCurThdId() is lightweight, but b/c of the ctrl-c/signals sometimes firing
   in other random WinOS threads, that make the TIDs go out of sync.
   This isn't always an error, although high chance of a SEGV in the next
@@ -67,6 +68,13 @@ win32_checkTLS(PerlInterpreter *host_per
         }
         host_perl->Isys_intern.cur_tid = tid;
     }
+#else
+    dTHX;
+    if (host_perl != my_perl) {
+        int *nowhere = NULL;
+        abort();
+    }
+#endif
 }
 
 EXTERN_C void
Index: gnu/usr.bin/perl/win32/pod.mak
===================================================================
RCS file: /home/afresh1/OpenBSD-perl/OP/cvs/src/gnu/usr.bin/perl/win32/pod.mak,v
diff -u -p -a -u -p -r1.32 pod.mak
--- gnu/usr.bin/perl/win32/pod.mak	26 Dec 2025 22:14:22 -0000	1.32
+++ gnu/usr.bin/perl/win32/pod.mak	29 Mar 2026 16:31:45 -0000
@@ -77,10 +77,14 @@ POD = perl.pod	\
 	perl5382delta.pod	\
 	perl5383delta.pod	\
 	perl5384delta.pod	\
+	perl5385delta.pod	\
 	perl5400delta.pod	\
 	perl5401delta.pod	\
 	perl5402delta.pod	\
+	perl5403delta.pod	\
 	perl5420delta.pod	\
+	perl5421delta.pod	\
+	perl5422delta.pod	\
 	perl561delta.pod	\
 	perl56delta.pod	\
 	perl581delta.pod	\
@@ -258,10 +262,14 @@ MAN = perl.man	\
 	perl5382delta.man	\
 	perl5383delta.man	\
 	perl5384delta.man	\
+	perl5385delta.man	\
 	perl5400delta.man	\
 	perl5401delta.man	\
 	perl5402delta.man	\
+	perl5403delta.man	\
 	perl5420delta.man	\
+	perl5421delta.man	\
+	perl5422delta.man	\
 	perl561delta.man	\
 	perl56delta.man	\
 	perl581delta.man	\
@@ -439,10 +447,14 @@ HTML = perl.html	\
 	perl5382delta.html	\
 	perl5383delta.html	\
 	perl5384delta.html	\
+	perl5385delta.html	\
 	perl5400delta.html	\
 	perl5401delta.html	\
 	perl5402delta.html	\
+	perl5403delta.html	\
 	perl5420delta.html	\
+	perl5421delta.html	\
+	perl5422delta.html	\
 	perl561delta.html	\
 	perl56delta.html	\
 	perl581delta.html	\
@@ -620,10 +632,14 @@ TEX = perl.tex	\
 	perl5382delta.tex	\
 	perl5383delta.tex	\
 	perl5384delta.tex	\
+	perl5385delta.tex	\
 	perl5400delta.tex	\
 	perl5401delta.tex	\
 	perl5402delta.tex	\
+	perl5403delta.tex	\
 	perl5420delta.tex	\
+	perl5421delta.tex	\
+	perl5422delta.tex	\
 	perl561delta.tex	\
 	perl56delta.tex	\
 	perl581delta.tex	\
