This is a live mirror of the Perl 5 development currently hosted at
3 months agoinstall libgdbm and libdb in GitHub Actions
Tomasz Konojacki [Wed, 13 Oct 2021 12:50:29 +0000 (14:50 +0200)]
install libgdbm and libdb in GitHub Actions

This ensures that DB_File and GDBM_File will be built and tested.

3 months agodisable LeakSanitizer in GitHub Actions
Tomasz Konojacki [Fri, 15 Oct 2021 17:45:20 +0000 (19:45 +0200)]
disable LeakSanitizer in GitHub Actions

It randomly fails with a fatal error for no apparent reason.

Fixes #19189

3 months agoMerge branch 'pp_iter' into blead
Ricardo Signes [Fri, 15 Oct 2021 13:42:23 +0000 (09:42 -0400)]
Merge branch 'pp_iter' into blead

3 months agoPod improvements suggested by Matthew Horsfall 18925/head
Nicholas Clark [Wed, 22 Sep 2021 10:58:00 +0000 (10:58 +0000)]
Pod improvements suggested by Matthew Horsfall

3 months agofor my ($foo,,, $bar) { ... } should parse as ($foo, $bar)
Nicholas Clark [Thu, 16 Sep 2021 09:19:25 +0000 (09:19 +0000)]
for my ($foo,,, $bar) { ... } should parse as ($foo, $bar)

Multiple commas between the lexicals in the list shouldn't change the

3 months agoTest next, continue and redo with n-at-a-time for loops
Nicholas Clark [Wed, 15 Sep 2021 20:06:53 +0000 (20:06 +0000)]
Test next, continue and redo with n-at-a-time for loops

3 months agoNote why this if block in pp_iter is empty
Nicholas Clark [Wed, 15 Sep 2021 17:47:32 +0000 (17:47 +0000)]
Note why this if block in pp_iter is empty

3 months agoperldelta for n-at-a-time for loops.
Nicholas Clark [Tue, 22 Jun 2021 05:27:28 +0000 (05:27 +0000)]
perldelta for n-at-a-time for loops.

3 months agon-at-a-time for loops now warn by default (as 'experimental::for_list').
Nicholas Clark [Mon, 21 Jun 2021 20:29:13 +0000 (20:29 +0000)]
n-at-a-time for loops now warn by default (as 'experimental::for_list').

3 months agoAdd a new warning experimental::for_list.
Nicholas Clark [Mon, 21 Jun 2021 19:34:29 +0000 (19:34 +0000)]
Add a new warning experimental::for_list.

3 months agoMove reading CxTYPE(cx) out of the loop, to be clear that it doesn't change.
Nicholas Clark [Tue, 27 Apr 2021 06:00:14 +0000 (06:00 +0000)]
Move reading CxTYPE(cx) out of the loop, to be clear that it doesn't change.

Move some other variable declarations into a tighter scope, and initialise
variables at the point of declaration where possible.

With the recent changes, the function consists of a 4-way switch inside a
loop, where each iteration of the loop will take the same case in the
switch. This implies a branch taken on each iteration of the loop, which
is less efficient than the alternative structure of taking the branch once
and then looping.

However, the way the code is structured (particularly how two of the cases
share code, by jumping sideways), means that rewriting it to "switch first"
structure would not be clearer (and likely would also be hard to get
right). Hence it seems better to let a compiler optimiser choose what is
best. However, it might not realise that CxTYPE(cx) won't be changed, even
as a side effect of any function called by this code. Hence hoist it into a
constant variable to make this unequivocal.

3 months agoB::Deparse now handles n-at-a-time for.
Nicholas Clark [Mon, 26 Apr 2021 11:23:33 +0000 (11:23 +0000)]
B::Deparse now handles n-at-a-time for.

3 months agoB::Concise now handles n-at-a-time for.
Nicholas Clark [Mon, 26 Apr 2021 11:05:21 +0000 (11:05 +0000)]
B::Concise now handles n-at-a-time for.

3 months agoRegression tests and documentation for n-at-a-time for.
Nicholas Clark [Mon, 26 Apr 2021 08:22:43 +0000 (08:22 +0000)]
Regression tests and documentation for n-at-a-time for.

3 months agoImplement n-at-a-time for loops.
Nicholas Clark [Sun, 25 Apr 2021 09:20:51 +0000 (09:20 +0000)]
Implement n-at-a-time for loops.

For example, this now works:

    for my ($key, $value) (%hash) { ... }

Only for scalars declared with my as a list in the for loop statement.
As many as you want (unless you want more than 4294967296).

3 months agoGenerate the optree for n-at-a-time for loops.
Nicholas Clark [Sun, 25 Apr 2021 19:35:40 +0000 (19:35 +0000)]
Generate the optree for n-at-a-time for loops.

Perl_newFOROP can now also take an OP_LIST corresponding to two or more
lexicals to iterate over n-at-a-time, where those lexicals are all
declared in the for statement, and occupy consecutive pad slots.

3 months agoIterate for loops $n-at-a-time in PP_ITER.
Nicholas Clark [Sun, 25 Apr 2021 20:03:37 +0000 (20:03 +0000)]
Iterate for loops $n-at-a-time in PP_ITER.

This commit provides the runtime changes needed to iterate for loops over
two or more variables.

3 months agoRe-indent the case statement in pp_iter, ready for the next commit.
Nicholas Clark [Sat, 24 Apr 2021 19:25:42 +0000 (19:25 +0000)]
Re-indent the case statement in pp_iter, ready for the next commit.

Add braces and indent a block that will become a `for` loop in the next
commit. With the exception of these and merging 3 opening braces onto the
`if` or `else` on the previous lines, this commit is purely a whitespace

3 months agoTests for existing for loop optrees.
Nicholas Clark [Mon, 26 Apr 2021 10:26:17 +0000 (10:26 +0000)]
Tests for existing for loop optrees.

3 months agoGDBM_File: Implement crash-tolerance and export/import functions.
Sergey Poznyakoff [Sat, 9 Oct 2021 10:15:48 +0000 (13:15 +0300)]
GDBM_File: Implement crash-tolerance and export/import functions.

* ext/GDBM_File/Makefile.PL: Register new constants: gdbm_open
flags and return values for gdbm_latest_snapshot.
* ext/GDBM_File/ Update documentation.
Export new constants.
Raise version to 1.21.
* ext/GDBM_File/GDBM_File.xs (dbcroak): Include system error
infomation, when appropriate.
(gdbm_syserrno): Return a meaningful value if not_here.
(gdbm_dump, gdbm_load, gdbm_convert)
(gdbm_failure_atomic, gdbm_latest_snapshot)
(gdbm_crash_tolerance_status): New functions.
* ext/GDBM_File/t/dump.t: New testcase.
* ext/GDBM_File/t/snapshot.t: New testcase.
* MANIFEST: List new files.

3 months agoMerge branch 'perlbug-string-3' into blead
James E Keenan [Wed, 13 Oct 2021 21:55:59 +0000 (21:55 +0000)]
Merge branch 'perlbug-string-3' into blead

For p.r.; last of 3 pull
requests for

3 months agoSend bugs to GitHub 19181/head
James E Keenan [Sat, 9 Oct 2021 16:38:04 +0000 (16:38 +0000)]
Send bugs to GitHub

Do not advise sending mail to '', as that now simply
triggers a response redirecting sender to GitHub.

3 months agoperlhacktips: Fix typo
Karl Williamson [Wed, 13 Oct 2021 15:15:51 +0000 (09:15 -0600)]
perlhacktips: Fix typo

3 months agoAdd a section to INSTALL describing that we now rely on some C99
Nicholas Clark [Sun, 10 Oct 2021 18:35:06 +0000 (18:35 +0000)]
Add a section to INSTALL describing that we now rely on some C99

And the implications for XS authors writing code to work on both current and
earlier perl installations.

3 months agoperldelta for C99 support
Nicholas Clark [Wed, 6 Oct 2021 18:50:09 +0000 (18:50 +0000)]
perldelta for C99 support

3 months agoDevel::PPPort shouldn't unconditionally -Wdeclaration-after-statement
Nicholas Clark [Wed, 6 Oct 2021 18:16:26 +0000 (18:16 +0000)]
Devel::PPPort shouldn't unconditionally -Wdeclaration-after-statement

Add the flag for gcc for perl v5.34.4 and earlier.

3 months agoIntroduce a "declaration after statement" into inline.h
Nicholas Clark [Wed, 6 Oct 2021 14:02:55 +0000 (14:02 +0000)]
Introduce a "declaration after statement" into inline.h

The core now permits some C99 code, so extensions need to ensure that any
C compiler flags they add or change permit C99 code.

This code is inlined by XS extensions in the core and on CPAN. The intent
is that this commit should show up for any failure bisection, making it
obvious what the cause is, and what the fix needs to be.

3 months agoUpdate README.win32 to the new C99/MSVC 12.0 requirements
Nicholas Clark [Wed, 6 Oct 2021 13:49:28 +0000 (13:49 +0000)]
Update README.win32 to the new C99/MSVC 12.0 requirements

* Remove specific notes related to Microsoft Visual C++ 2005 Express Edition
  and earlier
* Visual Studio 2013 is the only version that still has Express edition (in
  addition to Community), so simplify the text by only mentioning Community
* Remove the reference to IA64, and mention x86_64 along with x86
* In the context of x86_64, clarify that mingw's binaries can run on both
* Update the URL for mingw

3 months agoNote how best to confirm that other C99 features can be relied upon
Nicholas Clark [Wed, 6 Oct 2021 14:29:51 +0000 (14:29 +0000)]
Note how best to confirm that other C99 features can be relied upon

If C99 functionality can't be emulated on platforms which don't provide it,
then one really needs to test whether MSVC and the VMS compiler support it.

3 months agoUpdate perlhack with details of the C99 features we can now use
Nicholas Clark [Wed, 6 Oct 2021 12:01:25 +0000 (12:01 +0000)]
Update perlhack with details of the C99 features we can now use

Also update INSTALL to mention C99.

3 months should not add -std=c99 if -std=gnu99 is already set
Nicholas Clark [Sun, 10 Oct 2021 18:30:44 +0000 (18:30 +0000)] should not add -std=c99 if -std=gnu99 is already set

Having both looks like it ought to cause the build to fail, as with -std=c99
second it will override any previous -std=gnu99, and some platforms need the
former to both compile C99 code and have correct includes during Configure

However testing on those platforms without this change doesn't show any
errors. So this change doesn't seem to strictly be necessary. But it does
prevent our generated compiler command lines having contradictory flags,
and hence looking daft.

3 months agoTest declarations after statement in Configure's C99 probe code
Nicholas Clark [Sun, 10 Oct 2021 18:26:54 +0000 (18:26 +0000)]
Test declarations after statement in Configure's C99 probe code

Also ensure that the relevant failure error message is output even with
Configure's -s flag, as we shouldn't stay silent for a message that causes
Configure default to aborting.

With these changes, Configure will fail the C99 probe test if passed
-Accflags="-Werror=declaration-after-statement" or

3 months agoTeach Configure and cflags.SH about C99
Nicholas Clark [Sun, 18 Jul 2021 08:52:10 +0000 (08:52 +0000)]
Teach Configure and cflags.SH about C99

Probe to see whether we need -std=gnu99 or -std=c99 to get C99 code to
compile. In cflags.SH, remove code that added gcc warning flags that were
compatible with C89 but are not compatible with C99.

3 months agopp_match: remove is_utf8_string check, used by removed (v5.24) \C char class
Richard Leach [Sun, 26 Sep 2021 19:24:13 +0000 (20:24 +0100)]
pp_match: remove is_utf8_string check, used by removed (v5.24) \C char class

3 months agoLeave the checkout `fetch-depth` at its default (1) for most jobs 19153/head
Nicholas Clark [Wed, 22 Sep 2021 14:12:51 +0000 (14:12 +0000)]
Leave the checkout `fetch-depth` at its default (1) for most jobs

The default is a shallow checkout.

Keep the full checkout for the "sanity test" job so that it runs all the
tests in t/porting. Add a comment explaining the reasoning.

3 months agoA CI test that manicheck reports no errors on a clean checkout
Nicholas Clark [Mon, 27 Sep 2021 18:04:37 +0000 (18:04 +0000)]
A CI test that manicheck reports no errors on a clean checkout

Do this on the "minitest" job as that has no "manicheck" step yet, and the
"minitest" job does not have a "matrix", so we only run this actual test

3 months agoA CI test that manicheck has no errors after `git clean -dxf`
Nicholas Clark [Mon, 27 Sep 2021 18:01:49 +0000 (18:01 +0000)]
A CI test that manicheck has no errors after `git clean -dxf`

3 months agoAdd CI tests for `make distclean` and Porting/manicheck
Nicholas Clark [Wed, 22 Sep 2021 13:09:15 +0000 (13:09 +0000)]
Add CI tests for `make distclean` and Porting/manicheck

3 months agomanicheck now optionally exits non-zero if it finds problems
Nicholas Clark [Wed, 22 Sep 2021 08:57:33 +0000 (08:57 +0000)]
manicheck now optionally exits non-zero if it finds problems

This will enable it to be used in a CI test.

Refactor the code to avoid the temporary array @files by iterating over the
lines of MANIFEST as they are read in.

3 months agoIn manicheck be explicit that the code is stripping './'
Nicholas Clark [Wed, 22 Sep 2021 07:04:48 +0000 (07:04 +0000)]
In manicheck be explicit that the code is stripping './'

The regex had been written as /^../, which strictly was correct as the
string passed would *always* start with './', but this wasn't clear.

One had to stop and double check how File::Find::find() works, and what
argument it was called with. And it's not exactly clear when the '.' in
the regex text matches '.' and then '/', but the '/' in the regex is the

Given that the regex is being changed, move it later - previously the code
was performing a substitution on the value of $File::Find::name before it
knew that it needed it. (ie doing work for all directories.)

3 months agoEliminate more uses of `XPVHV* xhv;` to cache `(XPVHV*)SvANY(hv)`
Nicholas Clark [Tue, 21 Sep 2021 12:10:01 +0000 (12:10 +0000)]
Eliminate more uses of `XPVHV* xhv;` to cache `(XPVHV*)SvANY(hv)`

Similar to commit 4b6b6165ecccd54b, Perl_hv_clear() should instead read
HvMAX(hv) into a local variable.

Most other remaining uses no longer saved repeated dereferences, so
eliminate the verbosity and replace the explicit dereference with the normal
macro (and in some cases delete the comment which echos the macro).

In S_hv_free_entries() use HvTOTALKEYS(hv) directly. Whilst this is
potentially performing the deference of SvANY(hv) more than once, the
structure of the code is such that this will only happen on the last
iteration of the loop, or on the unlikely event that the hash contained NULL
values. (Such hashes are not legal in "Perl" space, but XS code can create

3 months agoperldelta entry describing the HvAUX struct move to the HV body
Nicholas Clark [Mon, 11 Oct 2021 12:04:00 +0000 (12:04 +0000)]
perldelta entry describing the HvAUX struct move to the HV body

None of this affects documented public XS interfaces. The only code changes
are in hv.c and sv.c. As the rest of the core itself uses these macros but
needed no changes, likely no code on CPAN will be affected either.

3 months agoRe-reading HvAUX(hv) is no longer necessary
Nicholas Clark [Tue, 21 Sep 2021 08:13:05 +0000 (08:13 +0000)]
Re-reading HvAUX(hv) is no longer necessary

Now that HvAUX(hv) is allocated as part of the HV's body, it no longer
moves in memory if the hash is resized. Hence there is no need to update
local copies of the pointer after any potential move, so remove the code
that did this.

3 months agoSplit the XPVHV body into two variants "normal" and "with aux"
Nicholas Clark [Fri, 20 Aug 2021 15:20:13 +0000 (15:20 +0000)]
Split the XPVHV body into two variants "normal" and "with aux"

Default to the smaller body, and switch to the larger body if we need to
allocate a C<struct xpvhv_aux> (eg need an iterator).

This restores the previous small size optimisation for hashes used as

3 months agoChange S_new_body to static inline, and use it instead of a macro
Nicholas Clark [Fri, 20 Aug 2021 11:28:40 +0000 (11:28 +0000)]
Change S_new_body to static inline, and use it instead of a macro

Rename the macro new_body_inline() to new_body_from_arena().

The macro existed to provide an inline implementation for hot code paths,
with a small function for the others. Now that we have proper inline
functions, change the function to be inlined, and use it instead of the
macro. There is no change to the code generated for the hot paths. This
makes the source simpler.

Yes, this will also inline the function in a couple of other places, but
these days optimising compilers often do that anyway for small functions.
Even if they aren't for this function (as was), the size of the function
itself is comparable with the calling overheads, so it's not a massive

Two if blocks now need to be placed inside #ifndef PURIFY/#endif guards
because they now use the function S_new_body(), which is not defined with
PURIFY. The code is actually unreachable - defining PURIFY causes all
values for new_type_details->arena to be forced to 0 - hence the if was
never true under PURIFY. Hence it could have been guarded the same way
previously, but for (maybe false) improved readability was not. Previously
there wasn't a compilation failure because the unreachable code was using
a macro, not a static function, and the macro was always defined, even when
not used.

Really the macro's definition should have been inside #ifndef PURIFY, so
fix this oversight - it is now only defined if it is needed.

Retain the macro (with a new name), and split the parameters to the macro.
This will make the next commit simpler.

3 months agoMove variables in Perl_sv_clear() to a tighter scope.
Nicholas Clark [Mon, 27 Sep 2021 11:48:14 +0000 (11:48 +0000)]
Move variables in Perl_sv_clear() to a tighter scope.

These three variables don't hold their values between iterations of the
while loop, so can be declared within it, to make this obvious.

3 months agoRename HE_SVSLOT to HE_ARENA_ROOT_IX
Nicholas Clark [Mon, 27 Sep 2021 10:02:01 +0000 (10:02 +0000)]

The longer name more accurately reflects what the constant refers to.

Correct the comments describing how some arena roots are re-used.

3 months agoInline S_hv_auxinit_internal() into S_hv_auxinit()
Nicholas Clark [Sat, 31 Jul 2021 15:31:00 +0000 (15:31 +0000)]
Inline S_hv_auxinit_internal() into S_hv_auxinit()

The previous commit eliminated the only other use of S_hv_auxinit_internal().

3 months agoDelete the do_aux code from S_hsplit()
Nicholas Clark [Sat, 31 Jul 2021 10:01:54 +0000 (10:01 +0000)]
Delete the do_aux code from S_hsplit()

This existed to handle automatically allocating an "aux" structure for
larger hashes, to save a (large) reallocation if they needed to be iterated.

Now that we no longer store the aux structure in the main hash array, we
don't need to take this precaution.

3 months agoNo need to set dest->xhv_rand in S_hsplit() called from hv_common()
Nicholas Clark [Mon, 27 Sep 2021 08:20:46 +0000 (08:20 +0000)]
No need to set dest->xhv_rand in S_hsplit() called from hv_common()

Perl_hv_common() only calls S_hsplit() after inserting a new hash key, if
the hash meets the "split" criteria. Inserting the new hash key has already
set HvAUX(hv)->xhv_rand to PL_hash_rand_bits (if the hash has an aux
struct), so no need to repeat the same assignment in S_hsplit() for this

However, this code path in S_hsplit() can also be reached from
Perl_hv_ksplit() for the case of assigning to `keys %hash` for a hash which
has an aux struct. The call to `keys` resets the hash iterator (in LVALUE
context as well as RVALUE context), but when the assignment changed the
bucket size this also had the size effect of causing a new iteration order.

It's not clear whether this really matters for security of the internal hash
state, but as this behaviour is both observable and can easily be retained,
it seems worthwhile adding the small amount of extra code needed to keep it.

Hence this commit is (or is intended to be) a pure refactoring, without any
observable behaviour change.

3 months agoInline the xhv_aux struct in the main hash body
Nicholas Clark [Thu, 22 Jul 2021 08:22:05 +0000 (08:22 +0000)]
Inline the xhv_aux struct in the main hash body

For now, memory for this structure is always allocated, even though it
isn't always flagged as being present.

3 months agocpan/Encode: synch with CPAN 3.15
Dan Kogai [Sun, 10 Oct 2021 20:45:40 +0000 (20:45 +0000)]
cpan/Encode: synch with CPAN 3.15

Per maintainer, this is a more complete fix for the problem addressed in
Encode 3.13: memory leak on FB_CROAK.  Certain problems with the sequencing of
pull requests have been addressed.

3 months agoWhitespace only: reindent #if 0 block
Hugo van der Sanden [Sun, 10 Oct 2021 13:41:45 +0000 (14:41 +0100)]
Whitespace only: reindent #if 0 block

Allow diff to spot that changes below here are in S_study_chunk rather
than in 'Perl_re_printf( aTHX_  "LHS=%" UVuf " RHS=%" UVuf "\n",'

3 months agoMerge branch 'perlbug-string-2' into blead
James E Keenan [Sat, 9 Oct 2021 23:09:42 +0000 (23:09 +0000)]
Merge branch 'perlbug-string-2' into blead

3 months agoBetter email address for Perl 5 Porters 19180/head
James E Keenan [Sat, 9 Oct 2021 16:29:43 +0000 (16:29 +0000)]
Better email address for Perl 5 Porters

3 months agoWe're Perl 5 Porters
James E Keenan [Sat, 9 Oct 2021 19:23:57 +0000 (19:23 +0000)]
We're Perl 5 Porters

3 months agoRetain original whitespace, per rjbs review
James E Keenan [Sat, 9 Oct 2021 19:22:22 +0000 (19:22 +0000)]
Retain original whitespace, per rjbs review

3 months agoSend bug reports to GitHub
James E Keenan [Sat, 9 Oct 2021 16:24:02 +0000 (16:24 +0000)]
Send bug reports to GitHub

Mail to '' now simply triggers a response redirecting
sender there.

3 months agoMerge branch 'allocation-too-large-gh-17867' into blead
James E Keenan [Sat, 9 Oct 2021 21:58:09 +0000 (21:58 +0000)]
Merge branch 'allocation-too-large-gh-17867' into blead

3 months agoRemove documentation of previously removed warning 19175/head
James E Keenan [Thu, 7 Oct 2021 23:18:55 +0000 (23:18 +0000)]
Remove documentation of previously removed warning

Per, the warning itself was
removed in February 2013.

3 months agoperldelta: Fix grammar
Karl Williamson [Sat, 9 Oct 2021 11:37:33 +0000 (05:37 -0600)]
perldelta: Fix grammar

3 months agoRemove NetWare support
Dagfinn Ilmari Mannsåker [Mon, 6 Jul 2020 15:30:53 +0000 (16:30 +0100)]
Remove NetWare support

The build has been broken since 2009.

3 months agoadd OPpUSEINT op_private flag bit
David Mitchell [Thu, 7 Oct 2021 16:15:47 +0000 (17:15 +0100)]
add OPpUSEINT op_private flag bit

The bitwise ops, such as a '<<', have an op_private flag that is set
when compiled within the scope of 'use integer;'.

Unfortunately, due to historical reasons, the defined flag that
indicates this bit (bit 0) is HINT_INTEGER rather than an OPpfoo define.
But HINT_INTEGER is supposed to represent a bit within PL_hints, not a bit
within op_private. If someone reorganised the flags in PL_hints at some
point, it would mess up bitwise ops.

So this commit:

1) adds a new flag, OPpUSEINT, to indicate the bit within op_private.
2) Changes this flag's value from 0x1 to 0x4 to force it to be different
   than HINT_INTEGER - thus potentially flushing out any misuse of this
   flag anywhere (in core or XS code).
3) tells regen/op_private that the lower two bits of op_private in bitwise
   ops don't contain the argument count. They never did, but not
   specifying that in regen/op_private meant that the debugging code in
   op_free() never spotted the unknown bit 0 sometimes being set.
4) Also tell that debugging code to skip the test if the op is banned.
   This fixes a new fail in dist/Safe/t/safeops.t which was croaking
   about a banned op having an unrecognised op_private flag bit set
   before ck_bitop() had a chance to delete the arg count in op_private.

3 months agoUpdate HTTP-Tiny to CPAN version 0.078
Chris 'BinGOs' Williams [Thu, 7 Oct 2021 14:46:37 +0000 (15:46 +0100)]
Update HTTP-Tiny to CPAN version 0.078


0.078     2021-08-02 09:24:03-04:00 America/New_York

    - No changes from 0.077-TRIAL.

0.077     2021-07-22 13:07:14-04:00 America/New_York (TRIAL RELEASE)


    - Added a `patch` helper method for the HTTP `PATCH` verb.

    - If the REQUEST_METHOD environment variable is set, then CGI_HTTP_PROXY
      replaces HTTP_PROXY.


    - Unsupported scheme errors early without giving an uninitialized value
      warning first.

    - Sends Content-Length: 0 on empty body PUT/POST.  This is not in the spec,
      but some servers require this.

    - Allows optional status line reason, as clarified in RFC 7230.

    - Ignore SIGPIPE on reads as well as writes, as IO::Socket::SSL says that
      SSL reads can also send writes as a side effect.

    - Check if a server has closed a connection before preserving it for reuse.


    - Clarified that exceptions/errors result in 599 status codes.


    - Optional IO::Socket::IP prereq must be at least version 0.32 to be used.
      This ensures correct timeout support.

3 months agoUpdate Digest to CPAN version 1.20
Chris 'BinGOs' Williams [Thu, 7 Oct 2021 14:44:53 +0000 (15:44 +0100)]
Update Digest to CPAN version 1.20


1.20 Tue 2021-08-24
- Remove temp files during unit tests.

3 months agoStorable is 3.25 on CPAN
Chris 'BinGOs' Williams [Thu, 7 Oct 2021 14:43:11 +0000 (15:43 +0100)]
Storable is 3.25 on CPAN

3 months agoIO is 1.48 on CPAN
Chris 'BinGOs' Williams [Thu, 7 Oct 2021 14:41:17 +0000 (15:41 +0100)]
IO is 1.48 on CPAN

3 months agocpan/Encode: synch with CPAN 3.13
Dan Kogai [Thu, 7 Oct 2021 11:48:58 +0000 (11:48 +0000)]
cpan/Encode: synch with CPAN 3.13

Address RT#139622.  It fixes the memory leak when you set FB_CROAK.
Usually that is not a problem because perl dies immediately after the
error occurs but that is not the case when you wrap it in eval {}.

3 months agoRemove the last traces of the no longer existing cmd_l command
E. Choroba [Mon, 4 Oct 2021 15:36:07 +0000 (17:36 +0200)]
Remove the last traces of the no longer existing cmd_l command

cmd_l was still mentioned in the documentation and comments.

3 months agorsync has gone away
Nicholas Clark [Wed, 6 Oct 2021 08:27:39 +0000 (08:27 +0000)]
rsync has gone away

Delete the section from perlhack.pod that mentioned it.

3 months must first check that ext/List/Util/Util.xs exists
Nicholas Clark [Wed, 29 Sep 2021 14:04:40 +0000 (14:04 +0000)] must first check that ext/List/Util/Util.xs exists

It's a hard error to attempt to patch a file that is not found.
ext/List/Util/Util.xs was only added to perl *during* the 5.7.x track.

Without this change was unable to build some early
revisions of 5.7.x

3 months should patch SDBM_File for parallel builds.
Nicholas Clark [Tue, 5 Oct 2021 17:05:39 +0000 (17:05 +0000)] should patch SDBM_File for parallel builds.

The fix in commit 4d106cc5d8fd328d:
    For SDBM_File, stop EU::MM from generating its default subdirs rule.

    The default subdirs rule creates a race condition with the rule that
    Makefile.PL explicitly adds to generate libsdbm.a, which can cause parallel
    makes to fail.

is needed for earlier perl versions to.

3 months should add -Ilib for in Makefile.SH
Nicholas Clark [Tue, 5 Oct 2021 13:40:59 +0000 (13:40 +0000)] should add -Ilib for in Makefile.SH

The fix from commit 72bbce3da5eeffde:
    miniperl also needs -Ilib for perl.exp on AIX etc

is needed to avoid build failures during parallel makes when is
run before all the toolchain modules have been copied into lib/

Specifically -Ilib on the command line to miniperl loads
which then sets @INC to include all the toolchain modules directly, whereas
setting @INC to lib in a BEGIN block doesn't trigger this complete setup. uses constant, which is dual life and copied from dist/constant/

3 months agoExpose a public SAVESTRLEN() macro
Paul "LeoNerd" Evans [Sun, 3 Oct 2021 10:47:35 +0000 (11:47 +0100)]
Expose a public SAVESTRLEN() macro

This seems to have been forgotten in the public API, perhaps because it
was added later.

Fixes #19165

3 months agoTwo minor Makefile.SH cleanups 19169/head
Nicholas Clark [Thu, 30 Sep 2021 12:50:30 +0000 (12:50 +0000)]
Two minor Makefile.SH cleanups

Use "$osname" instead of (bare) $osname in all case statements.
This was the only one that was different.

Delete PATH_SEP, which was never used.
This was added in Nov 1995 as part of commit 4633a7c4bad06b47:
    5.002 beta 1

with various other macros, and the comment "These variables will be used in
a future version to make the make file more portable to non-unix systems."

The other macros have been used, but not PATH_SEP.

Curiously it also gets a different value if one (re)generates Makefile by
running ./Makefile.SH, compared with a Makefile generated by Configure,
because the variable that it is set from - $p_ - is not in

3 months agoSimplify Makefile generation for cygwin
Nicholas Clark [Thu, 30 Sep 2021 12:28:04 +0000 (12:28 +0000)]
Simplify Makefile generation for cygwin

The rule to generate cygwin.c with a symbolic link from cygwin/cygwin.c can
actually be written to the generated Makefile on all platforms, as it causes
no problems if not used. It only "triggers" when a cygwin.o is part of the
Makefile macro ARCHOBJS, at which point suffix rules permit make to infer
that cygwin.o can be generated from cygwin.c, and cygwin.c from

The rule to generate LIBPERL_NONSHR is not used. It seems that it was never
used. It was added in July 2008 as part of commit 5f9145a3c5d730d3:
    Cygwin build harmonization, remove cygwin/Makefile.SHs

but the rule added to the top level Makefile.SH doesn't seem to correspond
to any rule in the removed file cygwin/Makefile.SHs

3 months agoFor AIX, modify the perl.exp path in ccdlflags earlier in Makefile.SH
Nicholas Clark [Thu, 30 Sep 2021 07:43:47 +0000 (07:43 +0000)]
For AIX, modify the perl.exp path in ccdlflags earlier in Makefile.SH

The value for ccdlflags includes the path to the *installed*
copy of the file perl.exp

While building, that file doesn't exist (or worse, is incompatible) so in
the Makefile we need CCDLFLAGS to point to the local copy. Previously the
Makefile had CCDLFLAGS first set to the value with the installed path, and
then set it again to the local path "for building Perl itself". However,
the Makefile is *only* used for building Perl itself (not installed
extensions), hence we never need the first value. Hence move the sed logic
for the change earlier, write out the first declaration of CCDLFLAGS with
the "local" value, and eliminate the second declaration.

The sed logic was added in July 1999 by commit 5f9d9a1727238445:
    AIX magic: ccdlflags needs to be different for
    Perl itself and for extra-core extensions
    (as used by ExtUtilss::embed::ldopts).
    Based on the problems described in
    Subject: [ID 19990722.002] Perl 5.00503 and AIX 4.1.5; perl.exp; build errors. Also Imagemagick...
    Message-Id: <>

It probably should have always been done the way this commit now does it.

3 months agoThe special AIX target MINIPERL_NONSHR is not needed, so remove it
Nicholas Clark [Thu, 30 Sep 2021 07:01:36 +0000 (07:01 +0000)]
The special AIX target MINIPERL_NONSHR is not needed, so remove it

AIX needs to generate a linker definition file prior to linking the perl

From the dawn of Perl 5, the miniperl binary was built nearly identically to
the perl binary, so for a build using a shared perl library, miniperl was
linked against the shared perl library.

Originally this linker definition file was generated by a shell script, but
this was problematic in various ways, so the AIX build was migrated to share
the Win32 approach - generating the linker definitions using

Because this needs to be run during the build, and because the build can't
assume that an installed perl binary exists, it needs to be run by a perl
binary in the build tree. (As was) even miniperl needed this file to exist
already, hence when this change was made the Makefile generated for AIX was
changed to add steps to build an extra 'miniperl_nonshr' binary, not using a
shared library, to generate the linker definition file.

This was all done in July 1999 with commit 549a6b102c2ac8c4:
    Fixed AIX dynamic loading and AIX shared Perl library.
    Tested in: AIX 4.1.5 cc+useshrplib+usethreads, 4.1.5 cc,
    4.1.5 gcc+useshrplib+usethreads, 4.3.1 cc+useshrplib.
    Hijacked win32/ for more general purpose export
    list building, now it is used (as toplevel
    for win32 and AIX (perl_exp.SH made unnecessary).
    Because the export lists are now correct in AIX, no more linker
    warnings about "Exported symbol not defined" should appear.

However the need for the 'miniperl_nonshr' binary was actually eliminated in
Feb 2000 by commit 18c4b137c9980e71: fix AIX and multiplicity problems

by the seemingly innocent looking change:

  case "${osname}${osvers}" in
- next4*)
+ next4*|aix*)
  $spitshell >>Makefile <<'!NO!SUBS!'
 miniperl: $& miniperlmain$(OBJ_EXT) $(LIBPERL) opmini$(OBJ_EXT)
  $(CC) -o miniperl `echo $(obj) | sed 's/ op$(OBJ_EXT) / /'` \

What this does is cause AIX to "join" the NeXTSTEP special case code, that
links miniperl with the object files. Meaning that from this point on AIX
miniperl was never using a shared perl library. So the special case build of
the 'miniperl_nonshr' binary could have been eliminated too.

Independent of this story, miniperl for every other platform *also* stopped
being linked against a shared perl library as of March 2006 with commit
    Move DynaLoader.o into

    This avoids the need to statically link DynaLoader into the stub perl
    executable and make provide all the code needed to get a
    functional embedded perl interpreter up running.  As a side effect
    this also moves DynaLoader into libperl.a for non-useshrplib builds.

    Fixes [perl #32539]

meaning that AIX no longer needs a special case for shared perl library
builds to keep miniperl unshared, because all platforms have it now.

Finally, in investigating a v5.26.0 build failure, I identified the cause
and then yesterday committed a fix to blead as part of commit 8f1941325681:
    The Makefile must run with -Ilib on the command line

not realising that this had already been identified and fixed by Merijn
in Oct 2017 by commit 72bbce3da5eeffde:
    miniperl also needs -Ilib for perl.exp on AIX etc

My commit mistakenly used miniperl_nonshr again. Revert back to his correct
approach, using the regular miniperl.

And hence we can safely delete miniperl_nonshr and all the logic related to
it, as it has been unused since Oct 2017.

3 months agoThe AIX specific Makefile rules to build miniperl are no longer needed
Nicholas Clark [Thu, 30 Sep 2021 06:24:13 +0000 (06:24 +0000)]
The AIX specific Makefile rules to build miniperl are no longer needed

The AIX specific Makefile rules to build miniperl are effectively identical
to the default rules for *nix platforms (and have been for some time).

Hence remove the special case logic - the defaults work just fine.

3 months agoRemove vestigial next4*) sections from Makefile.SH
Nicholas Clark [Thu, 30 Sep 2021 05:59:18 +0000 (05:59 +0000)]
Remove vestigial next4*) sections from Makefile.SH

NeXT support was removed in June 2014 by commit f05550c064c27360:
    Removed NeXT support

but that commit missed these hunks.

The crazy whitespace errors in the next4*) section were added by mistake
by me in June 2013 by commit b78ac7159b42a0e0: no longer writes to STDOUT

I'm not sure how I goofed that, but it had the side effect of breaking NeXT
builds, and no-one noticed.

3 months agoperldelta for e4140d10fb3
Tony Cook [Mon, 4 Oct 2021 04:25:03 +0000 (15:25 +1100)]
perldelta for e4140d10fb3

3 months agoignore universalmini.c
Tony Cook [Mon, 4 Oct 2021 04:24:41 +0000 (15:24 +1100)]
ignore universalmini.c

3 months agoOnly expose Internals::getcwd() in miniperl
Nicholas Clark [Mon, 13 Sep 2021 09:08:31 +0000 (09:08 +0000)]
Only expose Internals::getcwd() in miniperl

It's only used during bootstrapping for miniperl when the XS version of Cwd
is not yet available, and only needed on platforms that don't already
provide their own builtin for getcwd().

It was added in v5.30.0 with the clear warning that
    [it] may be removed or changed without notice

and is not used by any code on CPAN. (Cwd references it, but won't use it
once installed as it will have already found an XS implementation (platform
specific or generic).

3 months agoA single list of "special files for miniperl" in Makefile.SH
Nicholas Clark [Mon, 13 Sep 2021 08:29:32 +0000 (08:29 +0000)]
A single list of "special files for miniperl" in Makefile.SH

Generate the rest of the special case build logic from this list.

3 months agorelease schedule: Richard Leach to release v5.35.6
Ricardo Signes [Sun, 3 Oct 2021 23:30:18 +0000 (19:30 -0400)]
release schedule: Richard Leach to release v5.35.6

3 months agorelease schedule: leont will release v5.35.5
Ricardo Signes [Sun, 3 Oct 2021 20:47:18 +0000 (16:47 -0400)]
release schedule: leont will release v5.35.5

3 months agoReplace "grandfather ..." in toke.c with a full description
Nicholas Clark [Tue, 28 Sep 2021 19:42:40 +0000 (19:42 +0000)]
Replace "grandfather ..." in toke.c with a full description

"grandfather return to old style" only really makes sense if you are
familiar with parsing changes between perl 2 and perl 3.

For everyone else, add an explanation of a special case which is still
relevant to the present day.

3 months agoRemove pp_pack "unlisted" exceptions from t/porting/diag.t 19155/head
Nicholas Clark [Tue, 28 Sep 2021 12:36:51 +0000 (12:36 +0000)]
Remove pp_pack "unlisted" exceptions from t/porting/diag.t

"Invalid type '%c' in %s" is listed as "Invalid type '%s' in %s"
(ie %s not %c)

Append " in %s" to the perldiag.pod entry for the error
"'/' does not take a repeat count"

3 months agoReplace "grandfather in ..." with a full description of the change
Nicholas Clark [Tue, 28 Sep 2021 12:17:03 +0000 (12:17 +0000)]
Replace "grandfather in ..." with a full description of the change

Unrecognised characters in pack/unpack formats were made fatal in 5.004,
with an exception added in 5.004_04 for ',' to "just" warn.

Add tests that the format with the comma behaves the same as a format

3 months agoRemove 5.8.x conditional SKIPs from pack.t
Nicholas Clark [Tue, 28 Sep 2021 11:17:52 +0000 (11:17 +0000)]
Remove 5.8.x conditional SKIPs from pack.t

3 months agoMove `use strict;` *out* of the BEGIN block in 19158/head
Nicholas Clark [Wed, 29 Sep 2021 08:24:58 +0000 (08:24 +0000)]
Move `use strict;` *out* of the BEGIN block in

`use strict;` was moved into the BEGIN block in 2015 as part of commit
    export data symbols as data on Win32

This mistake wasn't spotted at the time, and meant that only the code within
the BEGIN block was subject to strictures.

3 months agoThe Makefile must run with -Ilib on the command line
Nicholas Clark [Wed, 29 Sep 2021 08:03:31 +0000 (08:03 +0000)]
The Makefile must run with -Ilib on the command line

It can't rely on adding 'lib' to @INC in a BEGIN block because during the
build not all modules *are* in lib yet. For miniperl the two are not
equivalent - adding -Ilib means that lib/ is run, and this
sets up @INC properly to include all the toolchain modules in dist and cpan.

In particular, constant is dual life and hence not available as
lib/ until it has been copied from dist/constant/lib as part of
the build process. Hence with a parallel build on AIX, before this commit
there was a race condition between the job that builds dist/constant and the
job that builds perl.exp. Sometimes the race was lost, resulting in a
mysterious failed build.

All other users of already invoke it with the appropriate -Ilib
or -I..\lib, so this change won't affect them.

3 months agoReplace "Grandfather" with a description of the relevant heuristic
Nicholas Clark [Tue, 28 Sep 2021 09:57:03 +0000 (09:57 +0000)]
Replace "Grandfather" with a description of the relevant heuristic

In April 2003 commit f2095865e3489f4e:
    Noted by Nat: -0 didn't work that well with Unicode.

added support for passing hexadecimal to the -0 option. As '-0' has an
optional argument, the chosen syntax for hex was ambiguous with '-0' clustered
with an '-x' option with an argument, so the heuristic described here was

3 months agoAdd .gitattributes to tell github to treat perly.{act,h,tab} as generated files
Paul "LeoNerd" Evans [Thu, 17 Jun 2021 20:59:41 +0000 (21:59 +0100)]
Add .gitattributes to tell github to treat perly.{act,h,tab} as generated files

3 months agoChange %grandfathers to %legacy in Config.t
Nicholas Clark [Tue, 28 Sep 2021 07:46:07 +0000 (07:46 +0000)]
Change %grandfathers to %legacy in Config.t

Also convert one ok() to cmp_ok(), and 3 uses of print to note().

3 months agoRemove grandfather as a verb in Tie::Handle, Tie::Hash and Tie::Scalar
Olaf Alders [Wed, 22 Sep 2021 21:07:02 +0000 (17:07 -0400)]
Remove grandfather as a verb in Tie::Handle, Tie::Hash and Tie::Scalar

See for initial discussion.

3 months agoperl_alloc_using() should use ->pCalloc
Nicholas Clark [Mon, 20 Sep 2021 15:04:29 +0000 (15:04 +0000)]
perl_alloc_using() should use ->pCalloc

Use ->pCalloc  instead of ->pMalloc followed by Zero()

This commit is analogous to the change in perl_alloc() in the previous
commit - the order of S_init_tls_and_interp() and Zero() can be swapped,
at which point the change to use "calloc" is obvious.

3 months agoNo need to wrap INIT_TRACK_MEMPOOL with #ifdef PERL_TRACK_MEMPOOL
Nicholas Clark [Wed, 22 Sep 2021 09:32:55 +0000 (09:32 +0000)]

`INIT_TRACK_MEMPOOL` is defined as a no-op if `PERL_TRACK_MEMPOOL` is not
defined, so no need to wrap it in `#ifdef`.

Spotted by Ilmari.

3 months agoperl_alloc() wants zeroed memory so should use calloc()
Nicholas Clark [Fri, 17 Sep 2021 19:43:51 +0000 (19:43 +0000)]
perl_alloc() wants zeroed memory so should use calloc()

The previous code

1) allocated memory with PerlMem_malloc()
2) passed the pointer to S_init_tls_and_interp()
3) called Zero() or ZeroD()
4) optionally invoked INIT_TRACK_MEMPOOL()
5) returned the pointer

ZeroD() and Zero() are equivalent, apart from the return value of the

The layers of functions and macros obscured what what was actually
happening, and what the ordering dependencies are:

* S_init_tls_and_interp() uses only the address of the pointer
* Zero() zeros the memory
* Only INIT_TRACK_MEMPOOL() touches the contents
* all the "memory wrap" macros inside the other macros can't "trigger"

Hence the order of Zero() and S_init_tls_and_interp() can be swapped,
at which point Zero() immediately follows malloc(), meaning that the two
should be be replaced with calloc().

This simplifies the function considerably.

3 months agoTest ASAN with -DDEBUGGING (and so also with assertions enabled)
Nicholas Clark [Tue, 21 Sep 2021 13:20:06 +0000 (13:20 +0000)]
Test ASAN with -DDEBUGGING (and so also with assertions enabled)

Make it clear in the earlier comment about -DDEBUGGING that it was
referencing the "linux" job, not the entire file.