Perl 5 Porters Mailing List Summary: September 20th-26th
[email protected] (Sawyer X) Mon, 28 Sep 2015 12:25:47 +0200
| Newsgroups | perl.perl5.summary |
|---|---|
| Message-ID | <CAMvkq_S=ny9ZQhD-HEsjbyQEWaJWP4N_k6MOHgV50jcmcbWR8A@mail.gmail.com> |
--047d7bdc87aa0de1de0520cc2056
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
September 20th-26th
Bug reports and bug fixes
Fuzzing to find bugs
More tickets were opened by Dan Collins and Brian Carpenter, results of
fuzzing perl and uncovering interesting ways to crash perl.
Brian Carpenter found two bugs causing a null pointer dereference,
leading
to a segfault ([1]Perl #126191, [2]Perl #126192).
Brian Carpenter found a couple of assertion failures ([3]Perl #126193,
[4]Perl #126170).
Dan Collins found a double free problem ([5]Perl #126199). Vincent Pit
was
able to provide a summary of this bug in the form of:
$[ .=3D *[ =3D 'y'
which I found too cool to leave out.
Dan Collins provided a segfault ([6]Perl #126204) caused by the followin=
g
reduced regex:
/(?[()-!])/
[7]Perl #126206 is a floating point exception. Reported by Dan Collins.
[8]Perl #126042 is a stack corruption caused by perl losing track of the
stack pointer. Reported by Dan Collins, fixed by Father Chrysostomos.
Father C. raised a problem with the implementation details of PL_sv_yes,
and cautiously proposed at least a specific usage of it be removed from
perl space. Zefram supported and added that -- even if implemented
correctly -- it would still be wrong.
[9]Perl #126064: Yet another stack corruption; like the previous one,
reported by Dan Collins, fixed by Father Chrysostomos.
[10]Perl #126188: When requiring [11]IO::File in an attempt to resolve
missing method on a hash, a segfault happens. Yet more results of
fuzzing.
Reported by Dan Collins.
Ricardo Signes bumped another fuzzing bug which caused a segfault and
Shlomi Fish provided a patch, seconded by Reini Urban and discussed and
approved on #p5p - leading to the patch being applied. ([12]Perl #125350=
)
Portability fixes
Dan Collins provided a patch for compiling perl on GNU/Linux which was
bisected to one of the recent AmigaOS-related changes. ([13]Perl #126152=
)
Dan Collins reports a problem with building quadmath Perl. Bulk88
provided
more comments and Lukas Mai delved into util.c finding a potential memor=
y
leak with the quadmath-related code. ([14]Perl #126203)
Sisyphus raised an issue of a test that has been failing for him on
Windows 7 since perl 5.23.3 having to do with read-only file attributes.
With the help of Tony Cook the packaging problem was solved. ([15]Perl
#126133)
Bulk88 provided additional information to a ticket requested to revert a
patch that caused a problem on Visual C. Karl Williamson does not wish t=
o
revert it and instead offers to handle the specific compiler explicitly.
([16]Perl #126045)
sv_backoff optimisation
Bulk88 provided a patch for making sv_backoff more tailcall friendly
([17]Perl #126171).
sv_backoff would change its return value from int to void, but as Bulk88
explains, since it was previously only returning a meaningless constant
value and since it should be reached via the public API function
sv_setsv(sv, &PL_sv_undef) (or several others) anyway, it shouldn't be a
problem. He also added this explanation as a documentation patch.
File::Find portability issue
Robert Mah raised a problem with [18]File::Find working between CIFS and
GNU/Linux systems - one supports nlink while the other does not and
File::Find failed to understand this. Dave Mitchell showed the commit
that
tries to identify it, and additional research by Robert has shown other =
C
utilities seem to have this problem too. ([19]Perl #126144)
More optimisations
Bulk88 bumped a ticket he opened at the beginning of 2014 to optimize tw=
o
functions using tied hashes. The bump resulted in additional comments
from
Tony Cook, following several rounds of comments and fixes between Dave
Mitchell and Bulk88. ([20]Perl #121348)
He also provided a patch for optimizing some stack manipulation.
([21]Perl
#126196)
Mysterious mod_perl compilation crash
Additional information provided by Michael Schout on a crash involving
pre-compiling modules under mod_perl tracing back to commit which fixed =
a
seemingly unrelated bug. ([22]Perl #126145)
Documenting the names of types
Linda Walsh opened a ticket regarding additional reference type
documentation. Ricardo adds an explanation of Regexp vs. REGEXP and note=
s
additional types that should probably be documented along the way.
([23]Perl #126150)
Finding modules on case-insensitive filesystems
Patrick Zimmermann raised an issue with loading modules on
case-insensitive systems. Zefram provided an explanation on why this
happens, unfortunately a combination of correct behavior with an API
design of an optional import method in a module - something that cannot
be
changed. ([24]Perl #126167)
Crashing perl with x
Dan Collins raised a problem with the x operator causing a segfault when
operating on a list. The ticket contains an in-depth discussion on the
problem and possible fixes. ([25]Perl #125937)
What's in th %! hash
Felipe Gasper opened a ticket suggesting to document the ability to use
the values of %!. ([26]Perl #125350)
Several regexp bugs
Victor ADAM has raised a ticket that the regexp pattern ]]]]][\\ should
raise an error but does not. Karl Williamson was able to reproduce, writ=
e
a patch, and will seek additional cases before pushing it. ([27]Perl
#126141)
He opened several other regex-related tickets:
* [28]Perl #126179: Regression with \N{}.
* [29]Perl #126181: \c inside (?[]).
* [30]Perl #126182: /(.(?2))((?<=3D(?=3D(?1)).))/ hangs, eats all avai=
lable
RAM.
* [31]Perl #126185: /(?-p)/ should raise an error.
* [32]Perl #126186: Document (*COMMIT:arg) and (*ACCEPT:arg).
* [33]Perl #126177: (?n) should be documented.
* [34]Perl #126187: /\p / and /\p^/ give strange warnings.
* [35]Perl #126180: /(?[\ &!])/ segfaults.
* [36]Perl #126178: /(?i/ and similar should raise an error.
Discussions
Smart Match, again
Ricardo Signes has laid out plans on cleaning up Smart Match and has
provided [37]test cases for the new expected behavior of Smart Match.
It would seem like Smart Match is going to get very clear, simple, and
most importantly, expected syntax.
The [38]thread itself is quite long and I recommend reading it only if
you're interested in what people had snagged on. The aforementioned gist
provides a clear spec of what Smart Match would become. The discussion
thread also contains some comments by Zefram on what he believes is also
confusion in Smart Match in [39]Perl 6.
Revising version string semantics
Following Lyon QA Hackathon and [40]its decisions, Ricardo Signes
provided
[41]a summary and queried for any reasoned objections to moving forward
with the recommendations. Questions were asked for clarifying specific
situations and amending was done on the linked gist.
Spaces in qr/\p L/
Karl Williamson [42]asked for comments on having spaces when using \p
(the
syntax for named Unicode properties) in regular expressions:
qr/\p L/
vs.
qr/\p L/x
Agreement that both should fail from Ricardo Signes, Yitzchak
Scott-Thoennes, and Abigail.
Removing legacy code from B
Nicolas R. [43]suggested removing "dead code" from core (specifically
[44]B relating to some PERL_VERSION checks and provided a patch removing
it. This turned into a conversation on what "dead code" is and whether i=
t
should be removed.
Main positions:
* Dave Mitchell agrees with removing the code.
* Tony Cook applied the patch.
* Reini Urban disagrees, as it was used as boilerplate code on CPAN.
* Todd Rinaldo supports removal and suggests considering adding docs.
Continued discussion:
Rocco Caputo asked about guidelines on obsolete implementations and dead
code in general while Aristotle Pagaltzis asked to think of this change
in
the context of the recently-surfaced concept of the [45]CPAN river and
doubts whether the code in question is, in fact, dead code.
Ricardo Signes proposed a practical solution along Todd's suggestion,
opting for finding a proper place for any important information which
might be lost in this commit - documentation.
Bulk88 had offered an example with [46]Encode supporting older perl
versions with what could be described as "dead code", which Ricardo
explained as a incorrect example, since Encode can be installed on older
perl versions, while new versions of [47]B cannot.
Unshifting undef to @ISA
Vadim Pushtaev opened [48]a ticket about unshifting more than one value
to
@ISA, leading to a [49]discussion about the problem.
Zefram was able to distill that example further. Aristotle Pagaltzis
suggests this raises two bugs instead of one: A loop that occurring
pushing undef to @ISA, and unshifting multiple defined values causing
perl
to unshift undef. Eirik Berg Hanssen was able to suggest a third bug
which
occurs inside an eval showing a different behavior.
Paul "LeoNerd" Evans suggested a possible reason for the warnings which
both Vadim and Zefram agree is the real cause. The problem? In Paul's ow=
n
words:
Random guess: 'unshift' has to create multiple holes at the start of
the
array so it doesn't suffer O(n^2) behaviour.
Zefram expands:
Pretty much. ppunshift() internally performs an avunshift() followed b=
y
a bunch of avstore()s. avunshift() doesn't take parameters for the
values to unshift; it always sticks undefs in. (Actually null pointers
internally.) The av_store() calls invoke magic on the array.
Dagfinn Ilmari Manns=C3=A5ker reminds there is a separate bug unearthed =
during
the debugging process in which storing undef values in @main::ISA warns
101 times before dying when detecting inheritance recursion. Paul's
observation should be noted:
Oops; sounds like the code to detect and warn against the chance of an
infinite recursion bug itself suffers an infinite recursion bug.
Ilmari provided a patch to delay the @ISA set magic until all items are
assigned (which is what is done in push but not unshift).
Tony Cook explained why the original magic delay code for push (and thus
the proposed same solution for unshift) is actually wrong and offered a
different solution instead.
Ilmari offered a new patch fixing both according to Tony's suggestion.
Optimizing reference checks
At the beginning of the month Jarkko Hietaniemi [50]raised a personal
annoyance with the fact that:
ref $foo eq 'ARRAY'
actually gets compiled into a string eq against the string constant
ARRAY,
which makes it not just inefficient, but also a possible problem with
blessed references - whether arrayref or ARRAY package name, not to
mention typo possibilities.
Zefram suggested a similar solution to what [51]Params::Classify does.
Kent noted that it's Perl should have a native typeof kind of check.
Bulk88 further delved into implementation details of other languages in
this respect and what possible changes could happen in perl 5 in order t=
o
accommodate this (and beyond). Unfortunately his email did not receive
comments.
Dereferencing and "anonymous scalars"
Bob Kleemann hit [52]a snag when trying to dereference a variable
referencing a previous variable with the same name using version numbers=
.
my $v =3D shift;
$v =3D \$v;
say sprintf("v%vd", $$v); # prints address, not value
Tony Cook explains it succinctly:
You're setting $v to a reference to itself, so $$v is the value of $v,
which is a reference [...].
Bob found a solution as the following code:
$v =3D \eval { $v };
This introduced an interesting thread on what Eirik Berg Hanssen referre=
d
to as anonymous scalars.
By the way, following an exhaustive explanation by Aristotle Pagaltzis,
Bob eventually went with:
$v =3D \do { my $copy =3D $v };
AUTOLOAD on non-existing tied hash methods
Bulk88 [53]asks whether AUTOLOAD should be called when some methods of a
tied hash do not exist.
Chas. Owen shared code demonstrating that the only function that must be
handled is TIEHASH.
Possible optimization for tied hashes
Bulk88 [54]wondered about possibly calling scalar keys on a tied hash
instead of iterating over the keys and values, which would result in a
nice optimization. Tony Cook explained why it will not be suitable for
the
purpose.
stat with an array
Following [55]a ticket raised by Jozef Mojzis, Dan Collins [56]writes
that
a side effect of fixing at least two crash-inducing bugs, stat no longer
works on arrays. He suggests declaring it a WONTFIX or add a warning and
a
note in [57]perldelta.
Father Chrysostomos [58]adds a reasonable use-case for stat(@_) and
suggests researching additional usages before attempting to fix it, one
way or the other, and Eirik Berg Hanssen offers reasons to both document
in perldelta and raise a warning.
Dan Collins provided a patch to warn with a documentation change.
Stack overflow with XS_RETURN?
Following [59]a ticket (mentioned above) referring to the x operator
causing a segfault, Bulk88 [60]wondered whether the XS_RETURN family of
macros could introduce a segfault as well. Dave Mitchell explained how i=
t
would not be possible, but added that maybe we should make it explicit i=
n
the documentation and by adding assertions.
Negative values in XSRETURN
Doug Bell [61]asked what should happen when XSRETURN receives a negative
value as a parameter. Dave Mitchell, backed by H. Merijn Brand (Tux),
suggests that since this corrupts the stack, an assertion should be
added.
A patch provided and being smoked.
Branch cleanups
Dave Mitchell sent another email with [62]a list of temporary Git
branches
to be deleted, asking people to prune them.
News
perl 5.23.3 released!
Peter Martini released [63]perl 5.23.3.
His epigraph follows:
Little of of all we value here
Wakes on the morn of its hundredth year
Without both feeling and looking queer.
In fact, there=E2=80=99s nothing that keeps its youth,
So far as I know, but a tree and truth.
(This is a moral that runs at large;
Take it. =E2=80=94 You=E2=80=99re welcome. =E2=80=94 No extra charge.)
-- The Deacon=E2=80=99s Masterpiece or The Wonderful "One-Hoss Shay": =
A
Logical Story
Oliver Wendell Holmes
[64]The announcement.
Encode 2.78 is out
Dan Kogai announced a new version of [65]Encode. Biggest change is
preloading the CP1252 encoding.
References
Visible links
1. https://rt.perl.org/Ticket/Display.html?id=3D126191
2. https://rt.perl.org/Ticket/Display.html?id=3D126192
3. https://rt.perl.org/Ticket/Display.html?id=3D126193
4. https://rt.perl.org/Ticket/Display.html?id=3D126170
5. https://rt.perl.org/Ticket/Display.html?id=3D126199
6. https://rt.perl.org/Ticket/Display.html?id=3D126204
7. https://rt.perl.org/Ticket/Display.html?id=3D126206
8. https://rt.perl.org/Ticket/Display.html?id=3D126042
9. https://rt.perl.org/Ticket/Display.html?id=3D126064
10. https://rt.perl.org/Ticket/Display.html?id=3D126188
11. https://metacpan.org/pod/IO::File
12. https://rt.perl.org/Ticket/Display.html?id=3D125350
13. https://rt.perl.org/Ticket/Display.html?id=3D126152
14. https://rt.perl.org/Ticket/Display.html?id=3D126203
15. https://rt.perl.org/Ticket/Display.html?id=3D126133
16. https://rt.perl.org/Ticket/Display.html?id=3D126045
17. https://rt.perl.org/Ticket/Display.html?id=3D126171
18. https://metacpan.org/pod/File::Find
19. https://rt.perl.org/Ticket/Display.html?id=3D126144
20. https://rt.perl.org/Public/Bug/Display.html?id=3D121348
21. https://rt.perl.org/Ticket/Display.html?id=3D126196
22. https://rt.perl.org/Ticket/Display.html?id=3D126145
23. https://rt.perl.org/Ticket/Display.html?id=3D126150
24. https://rt.perl.org/Ticket/Display.html?id=3D126167
25. https://rt.perl.org/Ticket/Display.html?id=3D125937
26. https://rt.perl.org/Ticket/Display.html?id=3D126174
27. https://rt.perl.org/Ticket/Display.html?id=3D126141
28. https://rt.perl.org/Ticket/Display.html?id=3D126179
29. https://rt.perl.org/Ticket/Display.html?id=3D126181
30. https://rt.perl.org/Ticket/Display.html?id=3D126182
31. https://rt.perl.org/Ticket/Display.html?id=3D126185
32. https://rt.perl.org/Ticket/Display.html?id=3D126186
33. https://rt.perl.org/Ticket/Display.html?id=3D126177
34. https://rt.perl.org/Ticket/Display.html?id=3D126187
35. https://rt.perl.org/Ticket/Display.html?id=3D126180
36. https://rt.perl.org/Ticket/Display.html?id=3D126178
37. https://gist.github.com/rjbs/fb5716d7dbd4f23939ea
38.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230881.html
39.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231292.html
40. https://gist.github.com/dagolden/9559280
41.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html
42.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231263.html
43.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230985.html
44. https://metacpan.org/pod/B
45. http://neilb.org/tag/cpan-river/
46. https://metacpan.org/pod/Encode
47. https://metacpan.org/pod/B
48. https://rt.perl.org/Ticket/Display.html?id=3D126082
49.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231063.html
50.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html
51. https://metacpan.org/pod/Params::Classify
52.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231048.html
53.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231207.html
54.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231210.html
55. https://rt.perl.org/Ticket/Display.html?id=3D126162
56.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231304.html
57. https://metacpan.org/pod/perldelta
58.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231309.html
59. https://rt.perl.org/Ticket/Display.html?id=3D125937
60.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231329.html
61.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228284.html
62.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231254.html
63. https://metacpan.org/release/PCM/perl-5.23.3/
64.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231173.html
65. https://metacpan.org/pod/Encode
September 20th-26th
Bug reports and bug fixes
Fuzzing to find bugs
More tickets were opened by Dan Collins and Brian Carpenter, results of
fuzzing perl and uncovering interesting ways to crash perl.
Brian Carpenter found two bugs causing a null pointer dereference,
leading
to a segfault ([1]Perl #126191, [2]Perl #126192).
Brian Carpenter found a couple of assertion failures ([3]Perl #126193,
[4]Perl #126170).
Dan Collins found a double free problem ([5]Perl #126199). Vincent Pit
was
able to provide a summary of this bug in the form of:
$[ .=3D *[ =3D 'y'
which I found too cool to leave out.
Dan Collins provided a segfault ([6]Perl #126204) caused by the followin=
g
reduced regex:
/(?[()-!])/
[7]Perl #126206 is a floating point exception. Reported by Dan Collins.
[8]Perl #126042 is a stack corruption caused by perl losing track of the
stack pointer. Reported by Dan Collins, fixed by Father Chrysostomos.
Father C. raised a problem with the implementation details of PL_sv_yes,
and cautiously proposed at least a specific usage of it be removed from
perl space. Zefram supported and added that -- even if implemented
correctly -- it would still be wrong.
[9]Perl #126064: Yet another stack corruption; like the previous one,
reported by Dan Collins, fixed by Father Chrysostomos.
[10]Perl #126188: When requiring [11]IO::File in an attempt to resolve
missing method on a hash, a segfault happens. Yet more results of
fuzzing.
Reported by Dan Collins.
Ricardo Signes bumped another fuzzing bug which caused a segfault and
Shlomi Fish provided a patch, seconded by Reini Urban and discussed and
approved on #p5p - leading to the patch being applied. ([12]Perl #125350=
)
Portability fixes
Dan Collins provided a patch for compiling perl on GNU/Linux which was
bisected to one of the recent AmigaOS-related changes. ([13]Perl #126152=
)
Dan Collins reports a problem with building quadmath Perl. Bulk88
provided
more comments and Lukas Mai delved into util.c finding a potential memor=
y
leak with the quadmath-related code. ([14]Perl #126203)
Sisyphus raised an issue of a test that has been failing for him on
Windows 7 since perl 5.23.3 having to do with read-only file attributes.
With the help of Tony Cook the packaging problem was solved. ([15]Perl
#126133)
Bulk88 provided additional information to a ticket requested to revert a
patch that caused a problem on Visual C. Karl Williamson does not wish t=
o
revert it and instead offers to handle the specific compiler explicitly.
([16]Perl #126045)
sv_backoff optimisation
Bulk88 provided a patch for making sv_backoff more tailcall friendly
([17]Perl #126171).
sv_backoff would change its return value from int to void, but as Bulk88
explains, since it was previously only returning a meaningless constant
value and since it should be reached via the public API function
sv_setsv(sv, &PL_sv_undef) (or several others) anyway, it shouldn't be a
problem. He also added this explanation as a documentation patch.
File::Find portability issue
Robert Mah raised a problem with [18]File::Find working between CIFS and
GNU/Linux systems - one supports nlink while the other does not and
File::Find failed to understand this. Dave Mitchell showed the commit
that
tries to identify it, and additional research by Robert has shown other =
C
utilities seem to have this problem too. ([19]Perl #126144)
More optimisations
Bulk88 bumped a ticket he opened at the beginning of 2014 to optimize tw=
o
functions using tied hashes. The bump resulted in additional comments
from
Tony Cook, following several rounds of comments and fixes between Dave
Mitchell and Bulk88. ([20]Perl #121348)
He also provided a patch for optimizing some stack manipulation.
([21]Perl
#126196)
Mysterious mod_perl compilation crash
Additional information provided by Michael Schout on a crash involving
pre-compiling modules under mod_perl tracing back to commit which fixed =
a
seemingly unrelated bug. ([22]Perl #126145)
Documenting the names of types
Linda Walsh opened a ticket regarding additional reference type
documentation. Ricardo adds an explanation of Regexp vs. REGEXP and note=
s
additional types that should probably be documented along the way.
([23]Perl #126150)
Finding modules on case-insensitive filesystems
Patrick Zimmermann raised an issue with loading modules on
case-insensitive systems. Zefram provided an explanation on why this
happens, unfortunately a combination of correct behavior with an API
design of an optional import method in a module - something that cannot
be
changed. ([24]Perl #126167)
Crashing perl with x
Dan Collins raised a problem with the x operator causing a segfault when
operating on a list. The ticket contains an in-depth discussion on the
problem and possible fixes. ([25]Perl #125937)
What's in th %! hash
Felipe Gasper opened a ticket suggesting to document the ability to use
the values of %!. ([26]Perl #125350)
Several regexp bugs
Victor ADAM has raised a ticket that the regexp pattern ]]]]][\\ should
raise an error but does not. Karl Williamson was able to reproduce, writ=
e
a patch, and will seek additional cases before pushing it. ([27]Perl
#126141)
He opened several other regex-related tickets:
* [28]Perl #126179: Regression with \N{}.
* [29]Perl #126181: \c inside (?[]).
* [30]Perl #126182: /(.(?2))((?<=3D(?=3D(?1)).))/ hangs, eats all avai=
lable
RAM.
* [31]Perl #126185: /(?-p)/ should raise an error.
* [32]Perl #126186: Document (*COMMIT:arg) and (*ACCEPT:arg).
* [33]Perl #126177: (?n) should be documented.
* [34]Perl #126187: /\p / and /\p^/ give strange warnings.
* [35]Perl #126180: /(?[\ &!])/ segfaults.
* [36]Perl #126178: /(?i/ and similar should raise an error.
Discussions
Smart Match, again
Ricardo Signes has laid out plans on cleaning up Smart Match and has
provided [37]test cases for the new expected behavior of Smart Match.
It would seem like Smart Match is going to get very clear, simple, and
most importantly, expected syntax.
The [38]thread itself is quite long and I recommend reading it only if
you're interested in what people had snagged on. The aforementioned gist
provides a clear spec of what Smart Match would become. The discussion
thread also contains some comments by Zefram on what he believes is also
confusion in Smart Match in [39]Perl 6.
Revising version string semantics
Following Lyon QA Hackathon and [40]its decisions, Ricardo Signes
provided
[41]a summary and queried for any reasoned objections to moving forward
with the recommendations. Questions were asked for clarifying specific
situations and amending was done on the linked gist.
Spaces in qr/\p L/
Karl Williamson [42]asked for comments on having spaces when using \p
(the
syntax for named Unicode properties) in regular expressions:
qr/\p L/
vs.
qr/\p L/x
Agreement that both should fail from Ricardo Signes, Yitzchak
Scott-Thoennes, and Abigail.
Removing legacy code from B
Nicolas R. [43]suggested removing "dead code" from core (specifically
[44]B relating to some PERL_VERSION checks and provided a patch removing
it. This turned into a conversation on what "dead code" is and whether i=
t
should be removed.
Main positions:
* Dave Mitchell agrees with removing the code.
* Tony Cook applied the patch.
* Reini Urban disagrees, as it was used as boilerplate code on CPAN.
* Todd Rinaldo supports removal and suggests considering adding docs.
Continued discussion:
Rocco Caputo asked about guidelines on obsolete implementations and dead
code in general while Aristotle Pagaltzis asked to think of this change
in
the context of the recently-surfaced concept of the [45]CPAN river and
doubts whether the code in question is, in fact, dead code.
Ricardo Signes proposed a practical solution along Todd's suggestion,
opting for finding a proper place for any important information which
might be lost in this commit - documentation.
Bulk88 had offered an example with [46]Encode supporting older perl
versions with what could be described as "dead code", which Ricardo
explained as a incorrect example, since Encode can be installed on older
perl versions, while new versions of [47]B cannot.
Unshifting undef to @ISA
Vadim Pushtaev opened [48]a ticket about unshifting more than one value
to
@ISA, leading to a [49]discussion about the problem.
Zefram was able to distill that example further. Aristotle Pagaltzis
suggests this raises two bugs instead of one: A loop that occurring
pushing undef to @ISA, and unshifting multiple defined values causing
perl
to unshift undef. Eirik Berg Hanssen was able to suggest a third bug
which
occurs inside an eval showing a different behavior.
Paul "LeoNerd" Evans suggested a possible reason for the warnings which
both Vadim and Zefram agree is the real cause. The problem? In Paul's ow=
n
words:
Random guess: 'unshift' has to create multiple holes at the start of
the
array so it doesn't suffer O(n^2) behaviour.
Zefram expands:
Pretty much. ppunshift() internally performs an avunshift() followed b=
y
a bunch of avstore()s. avunshift() doesn't take parameters for the
values to unshift; it always sticks undefs in. (Actually null pointers
internally.) The av_store() calls invoke magic on the array.
Dagfinn Ilmari Manns=C3=A5ker reminds there is a separate bug unearthed =
during
the debugging process in which storing undef values in @main::ISA warns
101 times before dying when detecting inheritance recursion. Paul's
observation should be noted:
Oops; sounds like the code to detect and warn against the chance of an
infinite recursion bug itself suffers an infinite recursion bug.
Ilmari provided a patch to delay the @ISA set magic until all items are
assigned (which is what is done in push but not unshift).
Tony Cook explained why the original magic delay code for push (and thus
the proposed same solution for unshift) is actually wrong and offered a
different solution instead.
Ilmari offered a new patch fixing both according to Tony's suggestion.
Optimizing reference checks
At the beginning of the month Jarkko Hietaniemi [50]raised a personal
annoyance with the fact that:
ref $foo eq 'ARRAY'
actually gets compiled into a string eq against the string constant
ARRAY,
which makes it not just inefficient, but also a possible problem with
blessed references - whether arrayref or ARRAY package name, not to
mention typo possibilities.
Zefram suggested a similar solution to what [51]Params::Classify does.
Kent noted that it's Perl should have a native typeof kind of check.
Bulk88 further delved into implementation details of other languages in
this respect and what possible changes could happen in perl 5 in order t=
o
accommodate this (and beyond). Unfortunately his email did not receive
comments.
Dereferencing and "anonymous scalars"
Bob Kleemann hit [52]a snag when trying to dereference a variable
referencing a previous variable with the same name using version numbers=
.
my $v =3D shift;
$v =3D \$v;
say sprintf("v%vd", $$v); # prints address, not value
Tony Cook explains it succinctly:
You're setting $v to a reference to itself, so $$v is the value of $v,
which is a reference [...].
Bob found a solution as the following code:
$v =3D \eval { $v };
This introduced an interesting thread on what Eirik Berg Hanssen referre=
d
to as anonymous scalars.
By the way, following an exhaustive explanation by Aristotle Pagaltzis,
Bob eventually went with:
$v =3D \do { my $copy =3D $v };
AUTOLOAD on non-existing tied hash methods
Bulk88 [53]asks whether AUTOLOAD should be called when some methods of a
tied hash do not exist.
Chas. Owen shared code demonstrating that the only function that must be
handled is TIEHASH.
Possible optimization for tied hashes
Bulk88 [54]wondered about possibly calling scalar keys on a tied hash
instead of iterating over the keys and values, which would result in a
nice optimization. Tony Cook explained why it will not be suitable for
the
purpose.
stat with an array
Following [55]a ticket raised by Jozef Mojzis, Dan Collins [56]writes
that
a side effect of fixing at least two crash-inducing bugs, stat no longer
works on arrays. He suggests declaring it a WONTFIX or add a warning and
a
note in [57]perldelta.
Father Chrysostomos [58]adds a reasonable use-case for stat(@_) and
suggests researching additional usages before attempting to fix it, one
way or the other, and Eirik Berg Hanssen offers reasons to both document
in perldelta and raise a warning.
Dan Collins provided a patch to warn with a documentation change.
Stack overflow with XS_RETURN?
Following [59]a ticket (mentioned above) referring to the x operator
causing a segfault, Bulk88 [60]wondered whether the XS_RETURN family of
macros could introduce a segfault as well. Dave Mitchell explained how i=
t
would not be possible, but added that maybe we should make it explicit i=
n
the documentation and by adding assertions.
Negative values in XSRETURN
Doug Bell [61]asked what should happen when XSRETURN receives a negative
value as a parameter. Dave Mitchell, backed by H. Merijn Brand (Tux),
suggests that since this corrupts the stack, an assertion should be
added.
A patch provided and being smoked.
Branch cleanups
Dave Mitchell sent another email with [62]a list of temporary Git
branches
to be deleted, asking people to prune them.
News
perl 5.23.3 released!
Peter Martini released [63]perl 5.23.3.
His epigraph follows:
Little of of all we value here
Wakes on the morn of its hundredth year
Without both feeling and looking queer.
In fact, there=E2=80=99s nothing that keeps its youth,
So far as I know, but a tree and truth.
(This is a moral that runs at large;
Take it. =E2=80=94 You=E2=80=99re welcome. =E2=80=94 No extra charge.)
-- The Deacon=E2=80=99s Masterpiece or The Wonderful "One-Hoss Shay": =
A
Logical Story
Oliver Wendell Holmes
[64]The announcement.
Encode 2.78 is out
Dan Kogai announced a new version of [65]Encode. Biggest change is
preloading the CP1252 encoding.
References
Visible links
1. https://rt.perl.org/Ticket/Display.html?id=3D126191
2. https://rt.perl.org/Ticket/Display.html?id=3D126192
3. https://rt.perl.org/Ticket/Display.html?id=3D126193
4. https://rt.perl.org/Ticket/Display.html?id=3D126170
5. https://rt.perl.org/Ticket/Display.html?id=3D126199
6. https://rt.perl.org/Ticket/Display.html?id=3D126204
7. https://rt.perl.org/Ticket/Display.html?id=3D126206
8. https://rt.perl.org/Ticket/Display.html?id=3D126042
9. https://rt.perl.org/Ticket/Display.html?id=3D126064
10. https://rt.perl.org/Ticket/Display.html?id=3D126188
11. https://metacpan.org/pod/IO::File
12. https://rt.perl.org/Ticket/Display.html?id=3D125350
13. https://rt.perl.org/Ticket/Display.html?id=3D126152
14. https://rt.perl.org/Ticket/Display.html?id=3D126203
15. https://rt.perl.org/Ticket/Display.html?id=3D126133
16. https://rt.perl.org/Ticket/Display.html?id=3D126045
17. https://rt.perl.org/Ticket/Display.html?id=3D126171
18. https://metacpan.org/pod/File::Find
19. https://rt.perl.org/Ticket/Display.html?id=3D126144
20. https://rt.perl.org/Public/Bug/Display.html?id=3D121348
21. https://rt.perl.org/Ticket/Display.html?id=3D126196
22. https://rt.perl.org/Ticket/Display.html?id=3D126145
23. https://rt.perl.org/Ticket/Display.html?id=3D126150
24. https://rt.perl.org/Ticket/Display.html?id=3D126167
25. https://rt.perl.org/Ticket/Display.html?id=3D125937
26. https://rt.perl.org/Ticket/Display.html?id=3D126174
27. https://rt.perl.org/Ticket/Display.html?id=3D126141
28. https://rt.perl.org/Ticket/Display.html?id=3D126179
29. https://rt.perl.org/Ticket/Display.html?id=3D126181
30. https://rt.perl.org/Ticket/Display.html?id=3D126182
31. https://rt.perl.org/Ticket/Display.html?id=3D126185
32. https://rt.perl.org/Ticket/Display.html?id=3D126186
33. https://rt.perl.org/Ticket/Display.html?id=3D126177
34. https://rt.perl.org/Ticket/Display.html?id=3D126187
35. https://rt.perl.org/Ticket/Display.html?id=3D126180
36. https://rt.perl.org/Ticket/Display.html?id=3D126178
37. https://gist.github.com/rjbs/fb5716d7dbd4f23939ea
38.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230881.html
39.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231292.html
40. https://gist.github.com/dagolden/9559280
41.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html
42.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231263.html
43.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230985.html
44. https://metacpan.org/pod/B
45. http://neilb.org/tag/cpan-river/
46. https://metacpan.org/pod/Encode
47. https://metacpan.org/pod/B
48. https://rt.perl.org/Ticket/Display.html?id=3D126082
49.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231063.html
50.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html
51. https://metacpan.org/pod/Params::Classify
52.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231048.html
53.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231207.html
54.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231210.html
55. https://rt.perl.org/Ticket/Display.html?id=3D126162
56.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231304.html
57. https://metacpan.org/pod/perldelta
58.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231309.html
59. https://rt.perl.org/Ticket/Display.html?id=3D125937
60.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231329.html
61.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg228284.html
62.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231254.html
63. https://metacpan.org/release/PCM/perl-5.23.3/
64.
http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231173.html
65. https://metacpan.org/pod/Encode
--047d7bdc87aa0de1de0520cc2056
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 September 20th-26th<br><br=
>Bug reports and bug fixes<br><br>=C2=A0 Fuzzing to find bugs<br><br>=C2=A0=
=C2=A0More tickets were opened by Dan Collins and Brian Carpenter, results=
of<br>=C2=A0 =C2=A0fuzzing perl and uncovering interesting ways to crash p=
erl.<br><br>=C2=A0 =C2=A0Brian Carpenter found two bugs causing a null poin=
ter dereference, leading<br>=C2=A0 =C2=A0to a segfault ([1]Perl #126191, [2=
]Perl #126192).<br><br>=C2=A0 =C2=A0Brian Carpenter found a couple of asser=
tion failures ([3]Perl #126193,<br>=C2=A0 =C2=A0[4]Perl #126170).<br><br>=
=C2=A0 =C2=A0Dan Collins found a double free problem ([5]Perl #126199). Vin=
cent Pit was<br>=C2=A0 =C2=A0able to provide a summary of this bug in the f=
orm of:<br><br>=C2=A0$[ .=3D *[ =3D 'y'<br><br>=C2=A0 =C2=A0which I=
found too cool to leave out.<br><br>=C2=A0 =C2=A0Dan Collins provided a se=
gfault ([6]Perl #126204) caused by the following<br>=C2=A0 =C2=A0reduced re=
gex:<br><br>=C2=A0/(?[()-!])/<br><br>=C2=A0 =C2=A0[7]Perl #126206 is a floa=
ting point exception. Reported by Dan Collins.<br><br>=C2=A0 =C2=A0[8]Perl =
#126042 is a stack corruption caused by perl losing track of the<br>=C2=A0 =
=C2=A0stack pointer. Reported by Dan Collins, fixed by Father Chrysostomos.=
<br><br>=C2=A0 =C2=A0Father C. raised a problem with the implementation det=
ails of PL_sv_yes,<br>=C2=A0 =C2=A0and cautiously proposed at least a speci=
fic usage of it be removed from<br>=C2=A0 =C2=A0perl space. Zefram supporte=
d and added that -- even if implemented<br>=C2=A0 =C2=A0correctly -- it wou=
ld still be wrong.<br><br>=C2=A0 =C2=A0[9]Perl #126064: Yet another stack c=
orruption; like the previous one,<br>=C2=A0 =C2=A0reported by Dan Collins, =
fixed by Father Chrysostomos.<br><br>=C2=A0 =C2=A0[10]Perl #126188: When re=
quiring [11]IO::File in an attempt to resolve<br>=C2=A0 =C2=A0missing metho=
d on a hash, a segfault happens. Yet more results of fuzzing.<br>=C2=A0 =C2=
=A0Reported by Dan Collins.<br><br>=C2=A0 =C2=A0Ricardo Signes bumped anoth=
er fuzzing bug which caused a segfault and<br>=C2=A0 =C2=A0Shlomi Fish prov=
ided a patch, seconded by Reini Urban and discussed and<br>=C2=A0 =C2=A0app=
roved on #p5p - leading to the patch being applied. ([12]Perl #125350)<br><=
br>=C2=A0 Portability fixes<br><br>=C2=A0 =C2=A0Dan Collins provided a patc=
h for compiling perl on GNU/Linux which was<br>=C2=A0 =C2=A0bisected to one=
of the recent AmigaOS-related changes. ([13]Perl #126152)<br><br>=C2=A0 =
=C2=A0Dan Collins reports a problem with building quadmath Perl. Bulk88 pro=
vided<br>=C2=A0 =C2=A0more comments and Lukas Mai delved into util.c findin=
g a potential memory<br>=C2=A0 =C2=A0leak with the quadmath-related code. (=
[14]Perl #126203)<br><br>=C2=A0 =C2=A0Sisyphus raised an issue of a test th=
at has been failing for him on<br>=C2=A0 =C2=A0Windows 7 since perl 5.23.3 =
having to do with read-only file attributes.<br>=C2=A0 =C2=A0With the help =
of Tony Cook the packaging problem was solved. ([15]Perl<br>=C2=A0 =C2=A0#1=
26133)<br><br>=C2=A0 =C2=A0Bulk88 provided additional information to a tick=
et requested to revert a<br>=C2=A0 =C2=A0patch that caused a problem on Vis=
ual C. Karl Williamson does not wish to<br>=C2=A0 =C2=A0revert it and inste=
ad offers to handle the specific compiler explicitly.<br>=C2=A0 =C2=A0([16]=
Perl #126045)<br><br>=C2=A0 sv_backoff optimisation<br><br>=C2=A0 =C2=A0Bul=
k88 provided a patch for making sv_backoff more tailcall friendly<br>=C2=A0=
=C2=A0([17]Perl #126171).<br><br>=C2=A0 =C2=A0sv_backoff would change its =
return value from int to void, but as Bulk88<br>=C2=A0 =C2=A0explains, sinc=
e it was previously only returning a meaningless constant<br>=C2=A0 =C2=A0v=
alue and since it should be reached via the public API function<br>=C2=A0 =
=C2=A0sv_setsv(sv, &PL_sv_undef) (or several others) anyway, it shouldn=
't be a<br>=C2=A0 =C2=A0problem. He also added this explanation as a do=
cumentation patch.<br><br>=C2=A0 File::Find portability issue<br><br>=C2=A0=
=C2=A0Robert Mah raised a problem with [18]File::Find working between CIFS=
and<br>=C2=A0 =C2=A0GNU/Linux systems - one supports nlink while the other=
does not and<br>=C2=A0 =C2=A0File::Find failed to understand this. Dave Mi=
tchell showed the commit that<br>=C2=A0 =C2=A0tries to identify it, and add=
itional research by Robert has shown other C<br>=C2=A0 =C2=A0utilities seem=
to have this problem too. ([19]Perl #126144)<br><br>=C2=A0 More optimisati=
ons<br><br>=C2=A0 =C2=A0Bulk88 bumped a ticket he opened at the beginning o=
f 2014 to optimize two<br>=C2=A0 =C2=A0functions using tied hashes. The bum=
p resulted in additional comments from<br>=C2=A0 =C2=A0Tony Cook, following=
several rounds of comments and fixes between Dave<br>=C2=A0 =C2=A0Mitchell=
and Bulk88. ([20]Perl #121348)<br><br>=C2=A0 =C2=A0He also provided a patc=
h for optimizing some stack manipulation. ([21]Perl<br>=C2=A0 =C2=A0#126196=
)<br><br>=C2=A0 Mysterious mod_perl compilation crash<br><br>=C2=A0 =C2=A0A=
dditional information provided by Michael Schout on a crash involving<br>=
=C2=A0 =C2=A0pre-compiling modules under mod_perl tracing back to commit wh=
ich fixed a<br>=C2=A0 =C2=A0seemingly unrelated bug. ([22]Perl #126145)<br>=
<br>=C2=A0 Documenting the names of types<br><br>=C2=A0 =C2=A0Linda Walsh o=
pened a ticket regarding additional reference type<br>=C2=A0 =C2=A0document=
ation. Ricardo adds an explanation of Regexp vs. REGEXP and notes<br>=C2=A0=
=C2=A0additional types that should probably be documented along the way.<b=
r>=C2=A0 =C2=A0([23]Perl #126150)<br><br>=C2=A0 Finding modules on case-ins=
ensitive filesystems<br><br>=C2=A0 =C2=A0Patrick Zimmermann raised an issue=
with loading modules on<br>=C2=A0 =C2=A0case-insensitive systems. Zefram p=
rovided an explanation on why this<br>=C2=A0 =C2=A0happens, unfortunately a=
combination of correct behavior with an API<br>=C2=A0 =C2=A0design of an o=
ptional import method in a module - something that cannot be<br>=C2=A0 =C2=
=A0changed. ([24]Perl #126167)<br><br>=C2=A0 Crashing perl with x<br><br>=
=C2=A0 =C2=A0Dan Collins raised a problem with the x operator causing a seg=
fault when<br>=C2=A0 =C2=A0operating on a list. The ticket contains an in-d=
epth discussion on the<br>=C2=A0 =C2=A0problem and possible fixes. ([25]Per=
l #125937)<br><br>=C2=A0 What's in th %! hash<br><br>=C2=A0 =C2=A0Felip=
e Gasper opened a ticket suggesting to document the ability to use<br>=C2=
=A0 =C2=A0the values of %!. ([26]Perl #125350)<br><br>=C2=A0 Several regexp=
bugs<br><br>=C2=A0 =C2=A0Victor ADAM has raised a ticket that the regexp p=
attern ]]]]][\\ should<br>=C2=A0 =C2=A0raise an error but does not. Karl Wi=
lliamson was able to reproduce, write<br>=C2=A0 =C2=A0a patch, and will see=
k additional cases before pushing it. ([27]Perl<br>=C2=A0 =C2=A0#126141)<br=
><br>=C2=A0 =C2=A0He opened several other regex-related tickets:<br><br>=C2=
=A0 =C2=A0 =C2=A0* [28]Perl #126179: Regression with \N{}.<br>=C2=A0 =C2=A0=
=C2=A0* [29]Perl #126181: \c inside (?[]).<br>=C2=A0 =C2=A0 =C2=A0* [30]Pe=
rl #126182: /(.(?2))((?<=3D(?=3D(?1)).))/ hangs, eats all available<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0RAM.<br>=C2=A0 =C2=A0 =C2=A0* [31]Perl #126185: =
/(?-p)/ should raise an error.<br>=C2=A0 =C2=A0 =C2=A0* [32]Perl #126186: D=
ocument (*COMMIT:arg) and (*ACCEPT:arg).<br>=C2=A0 =C2=A0 =C2=A0* [33]Perl =
#126177: (?n) should be documented.<br>=C2=A0 =C2=A0 =C2=A0* [34]Perl #1261=
87: /\p / and /\p^/ give strange warnings.<br>=C2=A0 =C2=A0 =C2=A0* [35]Per=
l #126180: /(?[\ &!])/ segfaults.<br>=C2=A0 =C2=A0 =C2=A0* [36]Perl #12=
6178: /(?i/ and similar should raise an error.<br><br>Discussions<br><br>=
=C2=A0 Smart Match, again<br><br>=C2=A0 =C2=A0Ricardo Signes has laid out p=
lans on cleaning up Smart Match and has<br>=C2=A0 =C2=A0provided [37]test c=
ases for the new expected behavior of Smart Match.<br><br>=C2=A0 =C2=A0It w=
ould seem like Smart Match is going to get very clear, simple, and<br>=C2=
=A0 =C2=A0most importantly, expected syntax.<br><br>=C2=A0 =C2=A0The [38]th=
read itself is quite long and I recommend reading it only if<br>=C2=A0 =C2=
=A0you're interested in what people had snagged on. The aforementioned =
gist<br>=C2=A0 =C2=A0provides a clear spec of what Smart Match would become=
. The discussion<br>=C2=A0 =C2=A0thread also contains some comments by Zefr=
am on what he believes is also<br>=C2=A0 =C2=A0confusion in Smart Match in =
[39]Perl 6.<br><br>=C2=A0 Revising version string semantics<br><br>=C2=A0 =
=C2=A0Following Lyon QA Hackathon and [40]its decisions, Ricardo Signes pro=
vided<br>=C2=A0 =C2=A0[41]a summary and queried for any reasoned objections=
to moving forward<br>=C2=A0 =C2=A0with the recommendations. Questions were=
asked for clarifying specific<br>=C2=A0 =C2=A0situations and amending was =
done on the linked gist.<br><br>=C2=A0 Spaces in qr/\p L/<br><br>=C2=A0 =C2=
=A0Karl Williamson [42]asked for comments on having spaces when using \p (t=
he<br>=C2=A0 =C2=A0syntax for named Unicode properties) in regular expressi=
ons:<br><br>=C2=A0qr/\p L/<br><br>=C2=A0 =C2=A0vs.<br><br>=C2=A0qr/\p L/x<b=
r><br>=C2=A0 =C2=A0Agreement that both should fail from Ricardo Signes, Yit=
zchak<br>=C2=A0 =C2=A0Scott-Thoennes, and Abigail.<br><br>=C2=A0 Removing l=
egacy code from B<br><br>=C2=A0 =C2=A0Nicolas R. [43]suggested removing &qu=
ot;dead code" from core (specifically<br>=C2=A0 =C2=A0[44]B relating t=
o some PERL_VERSION checks and provided a patch removing<br>=C2=A0 =C2=A0it=
. This turned into a conversation on what "dead code" is and whet=
her it<br>=C2=A0 =C2=A0should be removed.<br><br>=C2=A0 =C2=A0Main position=
s:<br><br>=C2=A0 =C2=A0 =C2=A0* Dave Mitchell agrees with removing the code=
.<br>=C2=A0 =C2=A0 =C2=A0* Tony Cook applied the patch.<br>=C2=A0 =C2=A0 =
=C2=A0* Reini Urban disagrees, as it was used as boilerplate code on CPAN.<=
br>=C2=A0 =C2=A0 =C2=A0* Todd Rinaldo supports removal and suggests conside=
ring adding docs.<br><br>=C2=A0 =C2=A0Continued discussion:<br><br>=C2=A0 =
=C2=A0Rocco Caputo asked about guidelines on obsolete implementations and d=
ead<br>=C2=A0 =C2=A0code in general while Aristotle Pagaltzis asked to thin=
k of this change in<br>=C2=A0 =C2=A0the context of the recently-surfaced co=
ncept of the [45]CPAN river and<br>=C2=A0 =C2=A0doubts whether the code in =
question is, in fact, dead code.<br><br>=C2=A0 =C2=A0Ricardo Signes propose=
d a practical solution along Todd's suggestion,<br>=C2=A0 =C2=A0opting =
for finding a proper place for any important information which<br>=C2=A0 =
=C2=A0might be lost in this commit - documentation.<br><br>=C2=A0 =C2=A0Bul=
k88 had offered an example with [46]Encode supporting older perl<br>=C2=A0 =
=C2=A0versions with what could be described as "dead code", which=
Ricardo<br>=C2=A0 =C2=A0explained as a incorrect example, since Encode can=
be installed on older<br>=C2=A0 =C2=A0perl versions, while new versions of=
[47]B cannot.<br><br>=C2=A0 Unshifting undef to @ISA<br><br>=C2=A0 =C2=A0V=
adim Pushtaev opened [48]a ticket about unshifting more than one value to<b=
r>=C2=A0 =C2=A0@ISA, leading to a [49]discussion about the problem.<br><br>=
=C2=A0 =C2=A0Zefram was able to distill that example further. Aristotle Pag=
altzis<br>=C2=A0 =C2=A0suggests this raises two bugs instead of one: A loop=
that occurring<br>=C2=A0 =C2=A0pushing undef to @ISA, and unshifting multi=
ple defined values causing perl<br>=C2=A0 =C2=A0to unshift undef. Eirik Ber=
g Hanssen was able to suggest a third bug which<br>=C2=A0 =C2=A0occurs insi=
de an eval showing a different behavior.<br><br>=C2=A0 =C2=A0Paul "Leo=
Nerd" Evans suggested a possible reason for the warnings which<br>=C2=
=A0 =C2=A0both Vadim and Zefram agree is the real cause. The problem? In Pa=
ul's own<br>=C2=A0 =C2=A0words:<br><br>=C2=A0 =C2=A0 =C2=A0Random guess=
: 'unshift' has to create multiple holes at the start of the<br>=C2=
=A0 =C2=A0 =C2=A0array so it doesn't suffer O(n^2) behaviour.<br><br>=
=C2=A0 =C2=A0Zefram expands:<br><br>=C2=A0 =C2=A0 =C2=A0Pretty much. ppunsh=
ift() internally performs an avunshift() followed by<br>=C2=A0 =C2=A0 =C2=
=A0a bunch of avstore()s. avunshift() doesn't take parameters for the<b=
r>=C2=A0 =C2=A0 =C2=A0values to unshift; it always sticks undefs in. (Actua=
lly null pointers<br>=C2=A0 =C2=A0 =C2=A0internally.) The av_store() calls =
invoke magic on the array.<br><br>=C2=A0 =C2=A0Dagfinn Ilmari Manns=C3=A5ke=
r reminds there is a separate bug unearthed during<br>=C2=A0 =C2=A0the debu=
gging process in which storing undef values in @main::ISA warns<br>=C2=A0 =
=C2=A0101 times before dying when detecting inheritance recursion. Paul'=
;s<br>=C2=A0 =C2=A0observation should be noted:<br><br>=C2=A0 =C2=A0 =C2=A0=
Oops; sounds like the code to detect and warn against the chance of an<br>=
=C2=A0 =C2=A0 =C2=A0infinite recursion bug itself suffers an infinite recur=
sion bug.<br><br>=C2=A0 =C2=A0Ilmari provided a patch to delay the @ISA set=
magic until all items are<br>=C2=A0 =C2=A0assigned (which is what is done =
in push but not unshift).<br><br>=C2=A0 =C2=A0Tony Cook explained why the o=
riginal magic delay code for push (and thus<br>=C2=A0 =C2=A0the proposed sa=
me solution for unshift) is actually wrong and offered a<br>=C2=A0 =C2=A0di=
fferent solution instead.<br><br>=C2=A0 =C2=A0Ilmari offered a new patch fi=
xing both according to Tony's suggestion.<br><br>=C2=A0 Optimizing refe=
rence checks<br><br>=C2=A0 =C2=A0At the beginning of the month Jarkko Hieta=
niemi [50]raised a personal<br>=C2=A0 =C2=A0annoyance with the fact that:<b=
r><br>=C2=A0ref $foo eq 'ARRAY'<br><br>=C2=A0 =C2=A0actually gets c=
ompiled into a string eq against the string constant ARRAY,<br>=C2=A0 =C2=
=A0which makes it not just inefficient, but also a possible problem with<br=
>=C2=A0 =C2=A0blessed references - whether arrayref or ARRAY package name, =
not to<br>=C2=A0 =C2=A0mention typo possibilities.<br><br>=C2=A0 =C2=A0Zefr=
am suggested a similar solution to what [51]Params::Classify does.<br>=C2=
=A0 =C2=A0Kent noted that it's Perl should have a native typeof kind of=
check.<br><br>=C2=A0 =C2=A0Bulk88 further delved into implementation detai=
ls of other languages in<br>=C2=A0 =C2=A0this respect and what possible cha=
nges could happen in perl 5 in order to<br>=C2=A0 =C2=A0accommodate this (a=
nd beyond). Unfortunately his email did not receive<br>=C2=A0 =C2=A0comment=
s.<br><br>=C2=A0 Dereferencing and "anonymous scalars"<br><br>=C2=
=A0 =C2=A0Bob Kleemann hit [52]a snag when trying to dereference a variable=
<br>=C2=A0 =C2=A0referencing a previous variable with the same name using v=
ersion numbers.<br><br>=C2=A0my $v =3D shift;<br>=C2=A0$v =3D \$v;<br>=C2=
=A0say sprintf("v%vd", $$v); # prints address, not value<br><br>=
=C2=A0 =C2=A0Tony Cook explains it succinctly:<br><br>=C2=A0 =C2=A0 =C2=A0Y=
ou're setting $v to a reference to itself, so $$v is the value of $v,<b=
r>=C2=A0 =C2=A0 =C2=A0which is a reference [...].<br><br>=C2=A0 =C2=A0Bob f=
ound a solution as the following code:<br><br>=C2=A0$v =3D \eval { $v };<br=
><br>=C2=A0 =C2=A0This introduced an interesting thread on what Eirik Berg =
Hanssen referred<br>=C2=A0 =C2=A0to as anonymous scalars.<br><br>=C2=A0 =C2=
=A0By the way, following an exhaustive explanation by Aristotle Pagaltzis,<=
br>=C2=A0 =C2=A0Bob eventually went with:<br><br>=C2=A0$v =3D \do { my $cop=
y =3D $v };<br><br>=C2=A0 AUTOLOAD on non-existing tied hash methods<br><br=
>=C2=A0 =C2=A0Bulk88 [53]asks whether AUTOLOAD should be called when some m=
ethods of a<br>=C2=A0 =C2=A0tied hash do not exist.<br><br>=C2=A0 =C2=A0Cha=
s. Owen shared code demonstrating that the only function that must be<br>=
=C2=A0 =C2=A0handled is TIEHASH.<br><br>=C2=A0 Possible optimization for ti=
ed hashes<br><br>=C2=A0 =C2=A0Bulk88 [54]wondered about possibly calling sc=
alar keys on a tied hash<br>=C2=A0 =C2=A0instead of iterating over the keys=
and values, which would result in a<br>=C2=A0 =C2=A0nice optimization. Ton=
y Cook explained why it will not be suitable for the<br>=C2=A0 =C2=A0purpos=
e.<br><br>=C2=A0 stat with an array<br><br>=C2=A0 =C2=A0Following [55]a tic=
ket raised by Jozef Mojzis, Dan Collins [56]writes that<br>=C2=A0 =C2=A0a s=
ide effect of fixing at least two crash-inducing bugs, stat no longer<br>=
=C2=A0 =C2=A0works on arrays. He suggests declaring it a WONTFIX or add a w=
arning and a<br>=C2=A0 =C2=A0note in [57]perldelta.<br><br>=C2=A0 =C2=A0Fat=
her Chrysostomos [58]adds a reasonable use-case for stat(@_) and<br>=C2=A0 =
=C2=A0suggests researching additional usages before attempting to fix it, o=
ne<br>=C2=A0 =C2=A0way or the other, and Eirik Berg Hanssen offers reasons =
to both document<br>=C2=A0 =C2=A0in perldelta and raise a warning.<br><br>=
=C2=A0 =C2=A0Dan Collins provided a patch to warn with a documentation chan=
ge.<br><br>=C2=A0 Stack overflow with XS_RETURN?<br><br>=C2=A0 =C2=A0Follow=
ing [59]a ticket (mentioned above) referring to the x operator<br>=C2=A0 =
=C2=A0causing a segfault, Bulk88 [60]wondered whether the XS_RETURN family =
of<br>=C2=A0 =C2=A0macros could introduce a segfault as well. Dave Mitchell=
explained how it<br>=C2=A0 =C2=A0would not be possible, but added that may=
be we should make it explicit in<br>=C2=A0 =C2=A0the documentation and by a=
dding assertions.<br><br>=C2=A0 Negative values in XSRETURN<br><br>=C2=A0 =
=C2=A0Doug Bell [61]asked what should happen when XSRETURN receives a negat=
ive<br>=C2=A0 =C2=A0value as a parameter. Dave Mitchell, backed by H. Merij=
n Brand (Tux),<br>=C2=A0 =C2=A0suggests that since this corrupts the stack,=
an assertion should be added.<br><br>=C2=A0 =C2=A0A patch provided and bei=
ng smoked.<br><br>=C2=A0 Branch cleanups<br><br>=C2=A0 =C2=A0Dave Mitchell =
sent another email with [62]a list of temporary Git branches<br>=C2=A0 =C2=
=A0to be deleted, asking people to prune them.<br><br>News<br><br>=C2=A0 pe=
rl 5.23.3 released!<br><br>=C2=A0 =C2=A0Peter Martini released [63]perl 5.2=
3.3.<br><br>=C2=A0 =C2=A0His epigraph follows:<br><br>=C2=A0Little of of al=
l we value here<br>=C2=A0Wakes on the morn of its hundredth year<br>=C2=A0W=
ithout both feeling and looking queer.<br>=C2=A0In fact, there=E2=80=99s no=
thing that keeps its youth,<br>=C2=A0So far as I know, but a tree and truth=
.<br>=C2=A0(This is a moral that runs at large;<br>=C2=A0Take it. =E2=80=94=
You=E2=80=99re welcome. =E2=80=94 No extra charge.)<br><br>=C2=A0 =C2=A0 =
=C2=A0-- The Deacon=E2=80=99s Masterpiece or The Wonderful "One-Hoss S=
hay": A Logical Story<br>=C2=A0Oliver Wendell Holmes<br><br>=C2=A0 =C2=
=A0[64]The announcement.<br><br>=C2=A0 Encode 2.78 is out<br><br>=C2=A0 =C2=
=A0Dan Kogai announced a new version of [65]Encode. Biggest change is<br>=
=C2=A0 =C2=A0preloading the CP1252 encoding.<br><br>References<br><br>=C2=
=A0 =C2=A0Visible links<br>=C2=A0 =C2=A01. <a href=3D"https://rt.perl.org/T=
icket/Display.html?id=3D126191">https://rt.perl.org/Ticket/Display.html?id=
=3D126191</a><br>=C2=A0 =C2=A02. <a href=3D"https://rt.perl.org/Ticket/Disp=
lay.html?id=3D126192">https://rt.perl.org/Ticket/Display.html?id=3D126192</=
a><br>=C2=A0 =C2=A03. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126193">https://rt.perl.org/Ticket/Display.html?id=3D126193</a><br>=C2=
=A0 =C2=A04. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126170=
">https://rt.perl.org/Ticket/Display.html?id=3D126170</a><br>=C2=A0 =C2=A05=
. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126199">https://r=
t.perl.org/Ticket/Display.html?id=3D126199</a><br>=C2=A0 =C2=A06. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126204">https://rt.perl.or=
g/Ticket/Display.html?id=3D126204</a><br>=C2=A0 =C2=A07. <a href=3D"https:/=
/rt.perl.org/Ticket/Display.html?id=3D126206">https://rt.perl.org/Ticket/Di=
splay.html?id=3D126206</a><br>=C2=A0 =C2=A08. <a href=3D"https://rt.perl.or=
g/Ticket/Display.html?id=3D126042">https://rt.perl.org/Ticket/Display.html?=
id=3D126042</a><br>=C2=A0 =C2=A09. <a href=3D"https://rt.perl.org/Ticket/Di=
splay.html?id=3D126064">https://rt.perl.org/Ticket/Display.html?id=3D126064=
</a><br>=C2=A0 10. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D=
126188">https://rt.perl.org/Ticket/Display.html?id=3D126188</a><br>=C2=A0 1=
1. <a href=3D"https://metacpan.org/pod/IO::File">https://metacpan.org/pod/I=
O::File</a><br>=C2=A0 12. <a href=3D"https://rt.perl.org/Ticket/Display.htm=
l?id=3D125350">https://rt.perl.org/Ticket/Display.html?id=3D125350</a><br>=
=C2=A0 13. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126152">=
https://rt.perl.org/Ticket/Display.html?id=3D126152</a><br>=C2=A0 14. <a hr=
ef=3D"https://rt.perl.org/Ticket/Display.html?id=3D126203">https://rt.perl.=
org/Ticket/Display.html?id=3D126203</a><br>=C2=A0 15. <a href=3D"https://rt=
.perl.org/Ticket/Display.html?id=3D126133">https://rt.perl.org/Ticket/Displ=
ay.html?id=3D126133</a><br>=C2=A0 16. <a href=3D"https://rt.perl.org/Ticket=
/Display.html?id=3D126045">https://rt.perl.org/Ticket/Display.html?id=3D126=
045</a><br>=C2=A0 17. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126171">https://rt.perl.org/Ticket/Display.html?id=3D126171</a><br>=C2=
=A0 18. <a href=3D"https://metacpan.org/pod/File::Find">https://metacpan.or=
g/pod/File::Find</a><br>=C2=A0 19. <a href=3D"https://rt.perl.org/Ticket/Di=
splay.html?id=3D126144">https://rt.perl.org/Ticket/Display.html?id=3D126144=
</a><br>=C2=A0 20. <a href=3D"https://rt.perl.org/Public/Bug/Display.html?i=
d=3D121348">https://rt.perl.org/Public/Bug/Display.html?id=3D121348</a><br>=
=C2=A0 21. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126196">=
https://rt.perl.org/Ticket/Display.html?id=3D126196</a><br>=C2=A0 22. <a hr=
ef=3D"https://rt.perl.org/Ticket/Display.html?id=3D126145">https://rt.perl.=
org/Ticket/Display.html?id=3D126145</a><br>=C2=A0 23. <a href=3D"https://rt=
.perl.org/Ticket/Display.html?id=3D126150">https://rt.perl.org/Ticket/Displ=
ay.html?id=3D126150</a><br>=C2=A0 24. <a href=3D"https://rt.perl.org/Ticket=
/Display.html?id=3D126167">https://rt.perl.org/Ticket/Display.html?id=3D126=
167</a><br>=C2=A0 25. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D125937">https://rt.perl.org/Ticket/Display.html?id=3D125937</a><br>=C2=
=A0 26. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126174">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126174</a><br>=C2=A0 27. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126141">https://rt.perl.or=
g/Ticket/Display.html?id=3D126141</a><br>=C2=A0 28. <a href=3D"https://rt.p=
erl.org/Ticket/Display.html?id=3D126179">https://rt.perl.org/Ticket/Display=
.html?id=3D126179</a><br>=C2=A0 29. <a href=3D"https://rt.perl.org/Ticket/D=
isplay.html?id=3D126181">https://rt.perl.org/Ticket/Display.html?id=3D12618=
1</a><br>=C2=A0 30. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126182">https://rt.perl.org/Ticket/Display.html?id=3D126182</a><br>=C2=
=A0 31. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126185">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126185</a><br>=C2=A0 32. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126186">https://rt.perl.or=
g/Ticket/Display.html?id=3D126186</a><br>=C2=A0 33. <a href=3D"https://rt.p=
erl.org/Ticket/Display.html?id=3D126177">https://rt.perl.org/Ticket/Display=
.html?id=3D126177</a><br>=C2=A0 34. <a href=3D"https://rt.perl.org/Ticket/D=
isplay.html?id=3D126187">https://rt.perl.org/Ticket/Display.html?id=3D12618=
7</a><br>=C2=A0 35. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126180">https://rt.perl.org/Ticket/Display.html?id=3D126180</a><br>=C2=
=A0 36. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126178">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126178</a><br>=C2=A0 37. <a href=
=3D"https://gist.github.com/rjbs/fb5716d7dbd4f23939ea">https://gist.github.=
com/rjbs/fb5716d7dbd4f23939ea</a><br>=C2=A0 38. <a href=3D"http://www.nntp.=
perl.org/group/perl.perl5.porters/2015/09/msg230881.html">http://www.nntp.p=
erl.org/group/perl.perl5.porters/2015/09/msg230881.html</a><br>=C2=A0 39. <=
a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg2312=
92.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23129=
2.html</a><br>=C2=A0 40. <a href=3D"https://gist.github.com/dagolden/955928=
0">https://gist.github.com/dagolden/9559280</a><br>=C2=A0 41. <a href=3D"ht=
tp://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html">htt=
p://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html</a><b=
r>=C2=A0 42. <a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2=
015/09/msg231263.html">http://www.nntp.perl.org/group/perl.perl5.porters/20=
15/09/msg231263.html</a><br>=C2=A0 43. <a href=3D"http://www.nntp.perl.org/=
group/perl.perl5.porters/2015/09/msg230985.html">http://www.nntp.perl.org/g=
roup/perl.perl5.porters/2015/09/msg230985.html</a><br>=C2=A0 44. <a href=3D=
"https://metacpan.org/pod/B">https://metacpan.org/pod/B</a><br>=C2=A0 45. <=
a href=3D"http://neilb.org/tag/cpan-river/">http://neilb.org/tag/cpan-river=
/</a><br>=C2=A0 46. <a href=3D"https://metacpan.org/pod/Encode">https://met=
acpan.org/pod/Encode</a><br>=C2=A0 47. <a href=3D"https://metacpan.org/pod/=
B">https://metacpan.org/pod/B</a><br>=C2=A0 48. <a href=3D"https://rt.perl.=
org/Ticket/Display.html?id=3D126082">https://rt.perl.org/Ticket/Display.htm=
l?id=3D126082</a><br>=C2=A0 49. <a href=3D"http://www.nntp.perl.org/group/p=
erl.perl5.porters/2015/09/msg231063.html">http://www.nntp.perl.org/group/pe=
rl.perl5.porters/2015/09/msg231063.html</a><br>=C2=A0 50. <a href=3D"http:/=
/www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html">http://=
www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html</a><br>=
=C2=A0 51. <a href=3D"https://metacpan.org/pod/Params::Classify">https://me=
tacpan.org/pod/Params::Classify</a><br>=C2=A0 52. <a href=3D"http://www.nnt=
p.perl.org/group/perl.perl5.porters/2015/09/msg231048.html">http://www.nntp=
.perl.org/group/perl.perl5.porters/2015/09/msg231048.html</a><br>=C2=A0 53.=
<a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23=
1207.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231=
207.html</a><br>=C2=A0 54. <a href=3D"http://www.nntp.perl.org/group/perl.p=
erl5.porters/2015/09/msg231210.html">http://www.nntp.perl.org/group/perl.pe=
rl5.porters/2015/09/msg231210.html</a><br>=C2=A0 55. <a href=3D"https://rt.=
perl.org/Ticket/Display.html?id=3D126162">https://rt.perl.org/Ticket/Displa=
y.html?id=3D126162</a><br>=C2=A0 56. <a href=3D"http://www.nntp.perl.org/gr=
oup/perl.perl5.porters/2015/09/msg231304.html">http://www.nntp.perl.org/gro=
up/perl.perl5.porters/2015/09/msg231304.html</a><br>=C2=A0 57. <a href=3D"h=
ttps://metacpan.org/pod/perldelta">https://metacpan.org/pod/perldelta</a><b=
r>=C2=A0 58. <a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2=
015/09/msg231309.html">http://www.nntp.perl.org/group/perl.perl5.porters/20=
15/09/msg231309.html</a><br>=C2=A0 59. <a href=3D"https://rt.perl.org/Ticke=
t/Display.html?id=3D125937">https://rt.perl.org/Ticket/Display.html?id=3D12=
5937</a><br>=C2=A0 60. <a href=3D"http://www.nntp.perl.org/group/perl.perl5=
.porters/2015/09/msg231329.html">http://www.nntp.perl.org/group/perl.perl5.=
porters/2015/09/msg231329.html</a><br>=C2=A0 61. <a href=3D"http://www.nntp=
.perl.org/group/perl.perl5.porters/2015/06/msg228284.html">http://www.nntp.=
perl.org/group/perl.perl5.porters/2015/06/msg228284.html</a><br>=C2=A0 62. =
<a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231=
254.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg2312=
54.html</a><br>=C2=A0 63. <a href=3D"https://metacpan.org/release/PCM/perl-=
5.23.3/">https://metacpan.org/release/PCM/perl-5.23.3/</a><br>=C2=A0 64. <a=
href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23117=
3.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231173=
.html</a><br>=C2=A0 65. <a href=3D"https://metacpan.org/pod/Encode">https:/=
/metacpan.org/pod/Encode</a>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 September 20th-=
26th<br><br>Bug reports and bug fixes<br><br>=C2=A0 Fuzzing to find bugs<br=
><br>=C2=A0 =C2=A0More tickets were opened by Dan Collins and Brian Carpent=
er, results of<br>=C2=A0 =C2=A0fuzzing perl and uncovering interesting ways=
to crash perl.<br><br>=C2=A0 =C2=A0Brian Carpenter found two bugs causing =
a null pointer dereference, leading<br>=C2=A0 =C2=A0to a segfault ([1]Perl =
#126191, [2]Perl #126192).<br><br>=C2=A0 =C2=A0Brian Carpenter found a coup=
le of assertion failures ([3]Perl #126193,<br>=C2=A0 =C2=A0[4]Perl #126170)=
.<br><br>=C2=A0 =C2=A0Dan Collins found a double free problem ([5]Perl #126=
199). Vincent Pit was<br>=C2=A0 =C2=A0able to provide a summary of this bug=
in the form of:<br><br>=C2=A0$[ .=3D *[ =3D 'y'<br><br>=C2=A0 =C2=
=A0which I found too cool to leave out.<br><br>=C2=A0 =C2=A0Dan Collins pro=
vided a segfault ([6]Perl #126204) caused by the following<br>=C2=A0 =C2=A0=
reduced regex:<br><br>=C2=A0/(?[()-!])/<br><br>=C2=A0 =C2=A0[7]Perl #126206=
is a floating point exception. Reported by Dan Collins.<br><br>=C2=A0 =C2=
=A0[8]Perl #126042 is a stack corruption caused by perl losing track of the=
<br>=C2=A0 =C2=A0stack pointer. Reported by Dan Collins, fixed by Father Ch=
rysostomos.<br><br>=C2=A0 =C2=A0Father C. raised a problem with the impleme=
ntation details of PL_sv_yes,<br>=C2=A0 =C2=A0and cautiously proposed at le=
ast a specific usage of it be removed from<br>=C2=A0 =C2=A0perl space. Zefr=
am supported and added that -- even if implemented<br>=C2=A0 =C2=A0correctl=
y -- it would still be wrong.<br><br>=C2=A0 =C2=A0[9]Perl #126064: Yet anot=
her stack corruption; like the previous one,<br>=C2=A0 =C2=A0reported by Da=
n Collins, fixed by Father Chrysostomos.<br><br>=C2=A0 =C2=A0[10]Perl #1261=
88: When requiring [11]IO::File in an attempt to resolve<br>=C2=A0 =C2=A0mi=
ssing method on a hash, a segfault happens. Yet more results of fuzzing.<br=
>=C2=A0 =C2=A0Reported by Dan Collins.<br><br>=C2=A0 =C2=A0Ricardo Signes b=
umped another fuzzing bug which caused a segfault and<br>=C2=A0 =C2=A0Shlom=
i Fish provided a patch, seconded by Reini Urban and discussed and<br>=C2=
=A0 =C2=A0approved on #p5p - leading to the patch being applied. ([12]Perl =
#125350)<br><br>=C2=A0 Portability fixes<br><br>=C2=A0 =C2=A0Dan Collins pr=
ovided a patch for compiling perl on GNU/Linux which was<br>=C2=A0 =C2=A0bi=
sected to one of the recent AmigaOS-related changes. ([13]Perl #126152)<br>=
<br>=C2=A0 =C2=A0Dan Collins reports a problem with building quadmath Perl.=
Bulk88 provided<br>=C2=A0 =C2=A0more comments and Lukas Mai delved into ut=
il.c finding a potential memory<br>=C2=A0 =C2=A0leak with the quadmath-rela=
ted code. ([14]Perl #126203)<br><br>=C2=A0 =C2=A0Sisyphus raised an issue o=
f a test that has been failing for him on<br>=C2=A0 =C2=A0Windows 7 since p=
erl 5.23.3 having to do with read-only file attributes.<br>=C2=A0 =C2=A0Wit=
h the help of Tony Cook the packaging problem was solved. ([15]Perl<br>=C2=
=A0 =C2=A0#126133)<br><br>=C2=A0 =C2=A0Bulk88 provided additional informati=
on to a ticket requested to revert a<br>=C2=A0 =C2=A0patch that caused a pr=
oblem on Visual C. Karl Williamson does not wish to<br>=C2=A0 =C2=A0revert =
it and instead offers to handle the specific compiler explicitly.<br>=C2=A0=
=C2=A0([16]Perl #126045)<br><br>=C2=A0 sv_backoff optimisation<br><br>=C2=
=A0 =C2=A0Bulk88 provided a patch for making sv_backoff more tailcall frien=
dly<br>=C2=A0 =C2=A0([17]Perl #126171).<br><br>=C2=A0 =C2=A0sv_backoff woul=
d change its return value from int to void, but as Bulk88<br>=C2=A0 =C2=A0e=
xplains, since it was previously only returning a meaningless constant<br>=
=C2=A0 =C2=A0value and since it should be reached via the public API functi=
on<br>=C2=A0 =C2=A0sv_setsv(sv, &PL_sv_undef) (or several others) anywa=
y, it shouldn't be a<br>=C2=A0 =C2=A0problem. He also added this explan=
ation as a documentation patch.<br><br>=C2=A0 File::Find portability issue<=
br><br>=C2=A0 =C2=A0Robert Mah raised a problem with [18]File::Find working=
between CIFS and<br>=C2=A0 =C2=A0GNU/Linux systems - one supports nlink wh=
ile the other does not and<br>=C2=A0 =C2=A0File::Find failed to understand =
this. Dave Mitchell showed the commit that<br>=C2=A0 =C2=A0tries to identif=
y it, and additional research by Robert has shown other C<br>=C2=A0 =C2=A0u=
tilities seem to have this problem too. ([19]Perl #126144)<br><br>=C2=A0 Mo=
re optimisations<br><br>=C2=A0 =C2=A0Bulk88 bumped a ticket he opened at th=
e beginning of 2014 to optimize two<br>=C2=A0 =C2=A0functions using tied ha=
shes. The bump resulted in additional comments from<br>=C2=A0 =C2=A0Tony Co=
ok, following several rounds of comments and fixes between Dave<br>=C2=A0 =
=C2=A0Mitchell and Bulk88. ([20]Perl #121348)<br><br>=C2=A0 =C2=A0He also p=
rovided a patch for optimizing some stack manipulation. ([21]Perl<br>=C2=A0=
=C2=A0#126196)<br><br>=C2=A0 Mysterious mod_perl compilation crash<br><br>=
=C2=A0 =C2=A0Additional information provided by Michael Schout on a crash i=
nvolving<br>=C2=A0 =C2=A0pre-compiling modules under mod_perl tracing back =
to commit which fixed a<br>=C2=A0 =C2=A0seemingly unrelated bug. ([22]Perl =
#126145)<br><br>=C2=A0 Documenting the names of types<br><br>=C2=A0 =C2=A0L=
inda Walsh opened a ticket regarding additional reference type<br>=C2=A0 =
=C2=A0documentation. Ricardo adds an explanation of Regexp vs. REGEXP and n=
otes<br>=C2=A0 =C2=A0additional types that should probably be documented al=
ong the way.<br>=C2=A0 =C2=A0([23]Perl #126150)<br><br>=C2=A0 Finding modul=
es on case-insensitive filesystems<br><br>=C2=A0 =C2=A0Patrick Zimmermann r=
aised an issue with loading modules on<br>=C2=A0 =C2=A0case-insensitive sys=
tems. Zefram provided an explanation on why this<br>=C2=A0 =C2=A0happens, u=
nfortunately a combination of correct behavior with an API<br>=C2=A0 =C2=A0=
design of an optional import method in a module - something that cannot be<=
br>=C2=A0 =C2=A0changed. ([24]Perl #126167)<br><br>=C2=A0 Crashing perl wit=
h x<br><br>=C2=A0 =C2=A0Dan Collins raised a problem with the x operator ca=
using a segfault when<br>=C2=A0 =C2=A0operating on a list. The ticket conta=
ins an in-depth discussion on the<br>=C2=A0 =C2=A0problem and possible fixe=
s. ([25]Perl #125937)<br><br>=C2=A0 What's in th %! hash<br><br>=C2=A0 =
=C2=A0Felipe Gasper opened a ticket suggesting to document the ability to u=
se<br>=C2=A0 =C2=A0the values of %!. ([26]Perl #125350)<br><br>=C2=A0 Sever=
al regexp bugs<br><br>=C2=A0 =C2=A0Victor ADAM has raised a ticket that the=
regexp pattern ]]]]][\\ should<br>=C2=A0 =C2=A0raise an error but does not=
. Karl Williamson was able to reproduce, write<br>=C2=A0 =C2=A0a patch, and=
will seek additional cases before pushing it. ([27]Perl<br>=C2=A0 =C2=A0#1=
26141)<br><br>=C2=A0 =C2=A0He opened several other regex-related tickets:<b=
r><br>=C2=A0 =C2=A0 =C2=A0* [28]Perl #126179: Regression with \N{}.<br>=C2=
=A0 =C2=A0 =C2=A0* [29]Perl #126181: \c inside (?[]).<br>=C2=A0 =C2=A0 =C2=
=A0* [30]Perl #126182: /(.(?2))((?<=3D(?=3D(?1)).))/ hangs, eats all ava=
ilable<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0RAM.<br>=C2=A0 =C2=A0 =C2=A0* [31]Perl=
#126185: /(?-p)/ should raise an error.<br>=C2=A0 =C2=A0 =C2=A0* [32]Perl =
#126186: Document (*COMMIT:arg) and (*ACCEPT:arg).<br>=C2=A0 =C2=A0 =C2=A0*=
[33]Perl #126177: (?n) should be documented.<br>=C2=A0 =C2=A0 =C2=A0* [34]=
Perl #126187: /\p / and /\p^/ give strange warnings.<br>=C2=A0 =C2=A0 =C2=
=A0* [35]Perl #126180: /(?[\ &!])/ segfaults.<br>=C2=A0 =C2=A0 =C2=A0* =
[36]Perl #126178: /(?i/ and similar should raise an error.<br><br>Discussio=
ns<br><br>=C2=A0 Smart Match, again<br><br>=C2=A0 =C2=A0Ricardo Signes has =
laid out plans on cleaning up Smart Match and has<br>=C2=A0 =C2=A0provided =
[37]test cases for the new expected behavior of Smart Match.<br><br>=C2=A0 =
=C2=A0It would seem like Smart Match is going to get very clear, simple, an=
d<br>=C2=A0 =C2=A0most importantly, expected syntax.<br><br>=C2=A0 =C2=A0Th=
e [38]thread itself is quite long and I recommend reading it only if<br>=C2=
=A0 =C2=A0you're interested in what people had snagged on. The aforemen=
tioned gist<br>=C2=A0 =C2=A0provides a clear spec of what Smart Match would=
become. The discussion<br>=C2=A0 =C2=A0thread also contains some comments =
by Zefram on what he believes is also<br>=C2=A0 =C2=A0confusion in Smart Ma=
tch in [39]Perl 6.<br><br>=C2=A0 Revising version string semantics<br><br>=
=C2=A0 =C2=A0Following Lyon QA Hackathon and [40]its decisions, Ricardo Sig=
nes provided<br>=C2=A0 =C2=A0[41]a summary and queried for any reasoned obj=
ections to moving forward<br>=C2=A0 =C2=A0with the recommendations. Questio=
ns were asked for clarifying specific<br>=C2=A0 =C2=A0situations and amendi=
ng was done on the linked gist.<br><br>=C2=A0 Spaces in qr/\p L/<br><br>=C2=
=A0 =C2=A0Karl Williamson [42]asked for comments on having spaces when usin=
g \p (the<br>=C2=A0 =C2=A0syntax for named Unicode properties) in regular e=
xpressions:<br><br>=C2=A0qr/\p L/<br><br>=C2=A0 =C2=A0vs.<br><br>=C2=A0qr/\=
p L/x<br><br>=C2=A0 =C2=A0Agreement that both should fail from Ricardo Sign=
es, Yitzchak<br>=C2=A0 =C2=A0Scott-Thoennes, and Abigail.<br><br>=C2=A0 Rem=
oving legacy code from B<br><br>=C2=A0 =C2=A0Nicolas R. [43]suggested remov=
ing "dead code" from core (specifically<br>=C2=A0 =C2=A0[44]B rel=
ating to some PERL_VERSION checks and provided a patch removing<br>=C2=A0 =
=C2=A0it. This turned into a conversation on what "dead code" is =
and whether it<br>=C2=A0 =C2=A0should be removed.<br><br>=C2=A0 =C2=A0Main =
positions:<br><br>=C2=A0 =C2=A0 =C2=A0* Dave Mitchell agrees with removing =
the code.<br>=C2=A0 =C2=A0 =C2=A0* Tony Cook applied the patch.<br>=C2=A0 =
=C2=A0 =C2=A0* Reini Urban disagrees, as it was used as boilerplate code on=
CPAN.<br>=C2=A0 =C2=A0 =C2=A0* Todd Rinaldo supports removal and suggests =
considering adding docs.<br><br>=C2=A0 =C2=A0Continued discussion:<br><br>=
=C2=A0 =C2=A0Rocco Caputo asked about guidelines on obsolete implementation=
s and dead<br>=C2=A0 =C2=A0code in general while Aristotle Pagaltzis asked =
to think of this change in<br>=C2=A0 =C2=A0the context of the recently-surf=
aced concept of the [45]CPAN river and<br>=C2=A0 =C2=A0doubts whether the c=
ode in question is, in fact, dead code.<br><br>=C2=A0 =C2=A0Ricardo Signes =
proposed a practical solution along Todd's suggestion,<br>=C2=A0 =C2=A0=
opting for finding a proper place for any important information which<br>=
=C2=A0 =C2=A0might be lost in this commit - documentation.<br><br>=C2=A0 =
=C2=A0Bulk88 had offered an example with [46]Encode supporting older perl<b=
r>=C2=A0 =C2=A0versions with what could be described as "dead code&quo=
t;, which Ricardo<br>=C2=A0 =C2=A0explained as a incorrect example, since E=
ncode can be installed on older<br>=C2=A0 =C2=A0perl versions, while new ve=
rsions of [47]B cannot.<br><br>=C2=A0 Unshifting undef to @ISA<br><br>=C2=
=A0 =C2=A0Vadim Pushtaev opened [48]a ticket about unshifting more than one=
value to<br>=C2=A0 =C2=A0@ISA, leading to a [49]discussion about the probl=
em.<br><br>=C2=A0 =C2=A0Zefram was able to distill that example further. Ar=
istotle Pagaltzis<br>=C2=A0 =C2=A0suggests this raises two bugs instead of =
one: A loop that occurring<br>=C2=A0 =C2=A0pushing undef to @ISA, and unshi=
fting multiple defined values causing perl<br>=C2=A0 =C2=A0to unshift undef=
. Eirik Berg Hanssen was able to suggest a third bug which<br>=C2=A0 =C2=A0=
occurs inside an eval showing a different behavior.<br><br>=C2=A0 =C2=A0Pau=
l "LeoNerd" Evans suggested a possible reason for the warnings wh=
ich<br>=C2=A0 =C2=A0both Vadim and Zefram agree is the real cause. The prob=
lem? In Paul's own<br>=C2=A0 =C2=A0words:<br><br>=C2=A0 =C2=A0 =C2=A0Ra=
ndom guess: 'unshift' has to create multiple holes at the start of =
the<br>=C2=A0 =C2=A0 =C2=A0array so it doesn't suffer O(n^2) behaviour.=
<br><br>=C2=A0 =C2=A0Zefram expands:<br><br>=C2=A0 =C2=A0 =C2=A0Pretty much=
. ppunshift() internally performs an avunshift() followed by<br>=C2=A0 =C2=
=A0 =C2=A0a bunch of avstore()s. avunshift() doesn't take parameters fo=
r the<br>=C2=A0 =C2=A0 =C2=A0values to unshift; it always sticks undefs in.=
(Actually null pointers<br>=C2=A0 =C2=A0 =C2=A0internally.) The av_store()=
calls invoke magic on the array.<br><br>=C2=A0 =C2=A0Dagfinn Ilmari Manns=
=C3=A5ker reminds there is a separate bug unearthed during<br>=C2=A0 =C2=A0=
the debugging process in which storing undef values in @main::ISA warns<br>=
=C2=A0 =C2=A0101 times before dying when detecting inheritance recursion. P=
aul's<br>=C2=A0 =C2=A0observation should be noted:<br><br>=C2=A0 =C2=A0=
=C2=A0Oops; sounds like the code to detect and warn against the chance of =
an<br>=C2=A0 =C2=A0 =C2=A0infinite recursion bug itself suffers an infinite=
recursion bug.<br><br>=C2=A0 =C2=A0Ilmari provided a patch to delay the @I=
SA set magic until all items are<br>=C2=A0 =C2=A0assigned (which is what is=
done in push but not unshift).<br><br>=C2=A0 =C2=A0Tony Cook explained why=
the original magic delay code for push (and thus<br>=C2=A0 =C2=A0the propo=
sed same solution for unshift) is actually wrong and offered a<br>=C2=A0 =
=C2=A0different solution instead.<br><br>=C2=A0 =C2=A0Ilmari offered a new =
patch fixing both according to Tony's suggestion.<br><br>=C2=A0 Optimiz=
ing reference checks<br><br>=C2=A0 =C2=A0At the beginning of the month Jark=
ko Hietaniemi [50]raised a personal<br>=C2=A0 =C2=A0annoyance with the fact=
that:<br><br>=C2=A0ref $foo eq 'ARRAY'<br><br>=C2=A0 =C2=A0actuall=
y gets compiled into a string eq against the string constant ARRAY,<br>=C2=
=A0 =C2=A0which makes it not just inefficient, but also a possible problem =
with<br>=C2=A0 =C2=A0blessed references - whether arrayref or ARRAY package=
name, not to<br>=C2=A0 =C2=A0mention typo possibilities.<br><br>=C2=A0 =C2=
=A0Zefram suggested a similar solution to what [51]Params::Classify does.<b=
r>=C2=A0 =C2=A0Kent noted that it's Perl should have a native typeof ki=
nd of check.<br><br>=C2=A0 =C2=A0Bulk88 further delved into implementation =
details of other languages in<br>=C2=A0 =C2=A0this respect and what possibl=
e changes could happen in perl 5 in order to<br>=C2=A0 =C2=A0accommodate th=
is (and beyond). Unfortunately his email did not receive<br>=C2=A0 =C2=A0co=
mments.<br><br>=C2=A0 Dereferencing and "anonymous scalars"<br><b=
r>=C2=A0 =C2=A0Bob Kleemann hit [52]a snag when trying to dereference a var=
iable<br>=C2=A0 =C2=A0referencing a previous variable with the same name us=
ing version numbers.<br><br>=C2=A0my $v =3D shift;<br>=C2=A0$v =3D \$v;<br>=
=C2=A0say sprintf("v%vd", $$v); # prints address, not value<br><b=
r>=C2=A0 =C2=A0Tony Cook explains it succinctly:<br><br>=C2=A0 =C2=A0 =C2=
=A0You're setting $v to a reference to itself, so $$v is the value of $=
v,<br>=C2=A0 =C2=A0 =C2=A0which is a reference [...].<br><br>=C2=A0 =C2=A0B=
ob found a solution as the following code:<br><br>=C2=A0$v =3D \eval { $v }=
;<br><br>=C2=A0 =C2=A0This introduced an interesting thread on what Eirik B=
erg Hanssen referred<br>=C2=A0 =C2=A0to as anonymous scalars.<br><br>=C2=A0=
=C2=A0By the way, following an exhaustive explanation by Aristotle Pagaltz=
is,<br>=C2=A0 =C2=A0Bob eventually went with:<br><br>=C2=A0$v =3D \do { my =
$copy =3D $v };<br><br>=C2=A0 AUTOLOAD on non-existing tied hash methods<br=
><br>=C2=A0 =C2=A0Bulk88 [53]asks whether AUTOLOAD should be called when so=
me methods of a<br>=C2=A0 =C2=A0tied hash do not exist.<br><br>=C2=A0 =C2=
=A0Chas. Owen shared code demonstrating that the only function that must be=
<br>=C2=A0 =C2=A0handled is TIEHASH.<br><br>=C2=A0 Possible optimization fo=
r tied hashes<br><br>=C2=A0 =C2=A0Bulk88 [54]wondered about possibly callin=
g scalar keys on a tied hash<br>=C2=A0 =C2=A0instead of iterating over the =
keys and values, which would result in a<br>=C2=A0 =C2=A0nice optimization.=
Tony Cook explained why it will not be suitable for the<br>=C2=A0 =C2=A0pu=
rpose.<br><br>=C2=A0 stat with an array<br><br>=C2=A0 =C2=A0Following [55]a=
ticket raised by Jozef Mojzis, Dan Collins [56]writes that<br>=C2=A0 =C2=
=A0a side effect of fixing at least two crash-inducing bugs, stat no longer=
<br>=C2=A0 =C2=A0works on arrays. He suggests declaring it a WONTFIX or add=
a warning and a<br>=C2=A0 =C2=A0note in [57]perldelta.<br><br>=C2=A0 =C2=
=A0Father Chrysostomos [58]adds a reasonable use-case for stat(@_) and<br>=
=C2=A0 =C2=A0suggests researching additional usages before attempting to fi=
x it, one<br>=C2=A0 =C2=A0way or the other, and Eirik Berg Hanssen offers r=
easons to both document<br>=C2=A0 =C2=A0in perldelta and raise a warning.<b=
r><br>=C2=A0 =C2=A0Dan Collins provided a patch to warn with a documentatio=
n change.<br><br>=C2=A0 Stack overflow with XS_RETURN?<br><br>=C2=A0 =C2=A0=
Following [59]a ticket (mentioned above) referring to the x operator<br>=C2=
=A0 =C2=A0causing a segfault, Bulk88 [60]wondered whether the XS_RETURN fam=
ily of<br>=C2=A0 =C2=A0macros could introduce a segfault as well. Dave Mitc=
hell explained how it<br>=C2=A0 =C2=A0would not be possible, but added that=
maybe we should make it explicit in<br>=C2=A0 =C2=A0the documentation and =
by adding assertions.<br><br>=C2=A0 Negative values in XSRETURN<br><br>=C2=
=A0 =C2=A0Doug Bell [61]asked what should happen when XSRETURN receives a n=
egative<br>=C2=A0 =C2=A0value as a parameter. Dave Mitchell, backed by H. M=
erijn Brand (Tux),<br>=C2=A0 =C2=A0suggests that since this corrupts the st=
ack, an assertion should be added.<br><br>=C2=A0 =C2=A0A patch provided and=
being smoked.<br><br>=C2=A0 Branch cleanups<br><br>=C2=A0 =C2=A0Dave Mitch=
ell sent another email with [62]a list of temporary Git branches<br>=C2=A0 =
=C2=A0to be deleted, asking people to prune them.<br><br>News<br><br>=C2=A0=
perl 5.23.3 released!<br><br>=C2=A0 =C2=A0Peter Martini released [63]perl =
5.23.3.<br><br>=C2=A0 =C2=A0His epigraph follows:<br><br>=C2=A0Little of of=
all we value here<br>=C2=A0Wakes on the morn of its hundredth year<br>=C2=
=A0Without both feeling and looking queer.<br>=C2=A0In fact, there=E2=80=99=
s nothing that keeps its youth,<br>=C2=A0So far as I know, but a tree and t=
ruth.<br>=C2=A0(This is a moral that runs at large;<br>=C2=A0Take it. =E2=
=80=94 You=E2=80=99re welcome. =E2=80=94 No extra charge.)<br><br>=C2=A0 =
=C2=A0 =C2=A0-- The Deacon=E2=80=99s Masterpiece or The Wonderful "One=
-Hoss Shay": A Logical Story<br>=C2=A0Oliver Wendell Holmes<br><br>=C2=
=A0 =C2=A0[64]The announcement.<br><br>=C2=A0 Encode 2.78 is out<br><br>=C2=
=A0 =C2=A0Dan Kogai announced a new version of [65]Encode. Biggest change i=
s<br>=C2=A0 =C2=A0preloading the CP1252 encoding.<br><br>References<br><br>=
=C2=A0 =C2=A0Visible links<br>=C2=A0 =C2=A01. <a href=3D"https://rt.perl.or=
g/Ticket/Display.html?id=3D126191">https://rt.perl.org/Ticket/Display.html?=
id=3D126191</a><br>=C2=A0 =C2=A02. <a href=3D"https://rt.perl.org/Ticket/Di=
splay.html?id=3D126192">https://rt.perl.org/Ticket/Display.html?id=3D126192=
</a><br>=C2=A0 =C2=A03. <a href=3D"https://rt.perl.org/Ticket/Display.html?=
id=3D126193">https://rt.perl.org/Ticket/Display.html?id=3D126193</a><br>=C2=
=A0 =C2=A04. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126170=
">https://rt.perl.org/Ticket/Display.html?id=3D126170</a><br>=C2=A0 =C2=A05=
. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126199">https://r=
t.perl.org/Ticket/Display.html?id=3D126199</a><br>=C2=A0 =C2=A06. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126204">https://rt.perl.or=
g/Ticket/Display.html?id=3D126204</a><br>=C2=A0 =C2=A07. <a href=3D"https:/=
/rt.perl.org/Ticket/Display.html?id=3D126206">https://rt.perl.org/Ticket/Di=
splay.html?id=3D126206</a><br>=C2=A0 =C2=A08. <a href=3D"https://rt.perl.or=
g/Ticket/Display.html?id=3D126042">https://rt.perl.org/Ticket/Display.html?=
id=3D126042</a><br>=C2=A0 =C2=A09. <a href=3D"https://rt.perl.org/Ticket/Di=
splay.html?id=3D126064">https://rt.perl.org/Ticket/Display.html?id=3D126064=
</a><br>=C2=A0 10. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D=
126188">https://rt.perl.org/Ticket/Display.html?id=3D126188</a><br>=C2=A0 1=
1. <a href=3D"https://metacpan.org/pod/IO::File">https://metacpan.org/pod/I=
O::File</a><br>=C2=A0 12. <a href=3D"https://rt.perl.org/Ticket/Display.htm=
l?id=3D125350">https://rt.perl.org/Ticket/Display.html?id=3D125350</a><br>=
=C2=A0 13. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126152">=
https://rt.perl.org/Ticket/Display.html?id=3D126152</a><br>=C2=A0 14. <a hr=
ef=3D"https://rt.perl.org/Ticket/Display.html?id=3D126203">https://rt.perl.=
org/Ticket/Display.html?id=3D126203</a><br>=C2=A0 15. <a href=3D"https://rt=
.perl.org/Ticket/Display.html?id=3D126133">https://rt.perl.org/Ticket/Displ=
ay.html?id=3D126133</a><br>=C2=A0 16. <a href=3D"https://rt.perl.org/Ticket=
/Display.html?id=3D126045">https://rt.perl.org/Ticket/Display.html?id=3D126=
045</a><br>=C2=A0 17. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126171">https://rt.perl.org/Ticket/Display.html?id=3D126171</a><br>=C2=
=A0 18. <a href=3D"https://metacpan.org/pod/File::Find">https://metacpan.or=
g/pod/File::Find</a><br>=C2=A0 19. <a href=3D"https://rt.perl.org/Ticket/Di=
splay.html?id=3D126144">https://rt.perl.org/Ticket/Display.html?id=3D126144=
</a><br>=C2=A0 20. <a href=3D"https://rt.perl.org/Public/Bug/Display.html?i=
d=3D121348">https://rt.perl.org/Public/Bug/Display.html?id=3D121348</a><br>=
=C2=A0 21. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126196">=
https://rt.perl.org/Ticket/Display.html?id=3D126196</a><br>=C2=A0 22. <a hr=
ef=3D"https://rt.perl.org/Ticket/Display.html?id=3D126145">https://rt.perl.=
org/Ticket/Display.html?id=3D126145</a><br>=C2=A0 23. <a href=3D"https://rt=
.perl.org/Ticket/Display.html?id=3D126150">https://rt.perl.org/Ticket/Displ=
ay.html?id=3D126150</a><br>=C2=A0 24. <a href=3D"https://rt.perl.org/Ticket=
/Display.html?id=3D126167">https://rt.perl.org/Ticket/Display.html?id=3D126=
167</a><br>=C2=A0 25. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D125937">https://rt.perl.org/Ticket/Display.html?id=3D125937</a><br>=C2=
=A0 26. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126174">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126174</a><br>=C2=A0 27. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126141">https://rt.perl.or=
g/Ticket/Display.html?id=3D126141</a><br>=C2=A0 28. <a href=3D"https://rt.p=
erl.org/Ticket/Display.html?id=3D126179">https://rt.perl.org/Ticket/Display=
.html?id=3D126179</a><br>=C2=A0 29. <a href=3D"https://rt.perl.org/Ticket/D=
isplay.html?id=3D126181">https://rt.perl.org/Ticket/Display.html?id=3D12618=
1</a><br>=C2=A0 30. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126182">https://rt.perl.org/Ticket/Display.html?id=3D126182</a><br>=C2=
=A0 31. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126185">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126185</a><br>=C2=A0 32. <a href=
=3D"https://rt.perl.org/Ticket/Display.html?id=3D126186">https://rt.perl.or=
g/Ticket/Display.html?id=3D126186</a><br>=C2=A0 33. <a href=3D"https://rt.p=
erl.org/Ticket/Display.html?id=3D126177">https://rt.perl.org/Ticket/Display=
.html?id=3D126177</a><br>=C2=A0 34. <a href=3D"https://rt.perl.org/Ticket/D=
isplay.html?id=3D126187">https://rt.perl.org/Ticket/Display.html?id=3D12618=
7</a><br>=C2=A0 35. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=
=3D126180">https://rt.perl.org/Ticket/Display.html?id=3D126180</a><br>=C2=
=A0 36. <a href=3D"https://rt.perl.org/Ticket/Display.html?id=3D126178">htt=
ps://rt.perl.org/Ticket/Display.html?id=3D126178</a><br>=C2=A0 37. <a href=
=3D"https://gist.github.com/rjbs/fb5716d7dbd4f23939ea">https://gist.github.=
com/rjbs/fb5716d7dbd4f23939ea</a><br>=C2=A0 38. <a href=3D"http://www.nntp.=
perl.org/group/perl.perl5.porters/2015/09/msg230881.html">http://www.nntp.p=
erl.org/group/perl.perl5.porters/2015/09/msg230881.html</a><br>=C2=A0 39. <=
a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg2312=
92.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23129=
2.html</a><br>=C2=A0 40. <a href=3D"https://gist.github.com/dagolden/955928=
0">https://gist.github.com/dagolden/9559280</a><br>=C2=A0 41. <a href=3D"ht=
tp://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html">htt=
p://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231216.html</a><b=
r>=C2=A0 42. <a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2=
015/09/msg231263.html">http://www.nntp.perl.org/group/perl.perl5.porters/20=
15/09/msg231263.html</a><br>=C2=A0 43. <a href=3D"http://www.nntp.perl.org/=
group/perl.perl5.porters/2015/09/msg230985.html">http://www.nntp.perl.org/g=
roup/perl.perl5.porters/2015/09/msg230985.html</a><br>=C2=A0 44. <a href=3D=
"https://metacpan.org/pod/B">https://metacpan.org/pod/B</a><br>=C2=A0 45. <=
a href=3D"http://neilb.org/tag/cpan-river/">http://neilb.org/tag/cpan-river=
/</a><br>=C2=A0 46. <a href=3D"https://metacpan.org/pod/Encode">https://met=
acpan.org/pod/Encode</a><br>=C2=A0 47. <a href=3D"https://metacpan.org/pod/=
B">https://metacpan.org/pod/B</a><br>=C2=A0 48. <a href=3D"https://rt.perl.=
org/Ticket/Display.html?id=3D126082">https://rt.perl.org/Ticket/Display.htm=
l?id=3D126082</a><br>=C2=A0 49. <a href=3D"http://www.nntp.perl.org/group/p=
erl.perl5.porters/2015/09/msg231063.html">http://www.nntp.perl.org/group/pe=
rl.perl5.porters/2015/09/msg231063.html</a><br>=C2=A0 50. <a href=3D"http:/=
/www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html">http://=
www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg230637.html</a><br>=
=C2=A0 51. <a href=3D"https://metacpan.org/pod/Params::Classify">https://me=
tacpan.org/pod/Params::Classify</a><br>=C2=A0 52. <a href=3D"http://www.nnt=
p.perl.org/group/perl.perl5.porters/2015/09/msg231048.html">http://www.nntp=
.perl.org/group/perl.perl5.porters/2015/09/msg231048.html</a><br>=C2=A0 53.=
<a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23=
1207.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231=
207.html</a><br>=C2=A0 54. <a href=3D"http://www.nntp.perl.org/group/perl.p=
erl5.porters/2015/09/msg231210.html">http://www.nntp.perl.org/group/perl.pe=
rl5.porters/2015/09/msg231210.html</a><br>=C2=A0 55. <a href=3D"https://rt.=
perl.org/Ticket/Display.html?id=3D126162">https://rt.perl.org/Ticket/Displa=
y.html?id=3D126162</a><br>=C2=A0 56. <a href=3D"http://www.nntp.perl.org/gr=
oup/perl.perl5.porters/2015/09/msg231304.html">http://www.nntp.perl.org/gro=
up/perl.perl5.porters/2015/09/msg231304.html</a><br>=C2=A0 57. <a href=3D"h=
ttps://metacpan.org/pod/perldelta">https://metacpan.org/pod/perldelta</a><b=
r>=C2=A0 58. <a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2=
015/09/msg231309.html">http://www.nntp.perl.org/group/perl.perl5.porters/20=
15/09/msg231309.html</a><br>=C2=A0 59. <a href=3D"https://rt.perl.org/Ticke=
t/Display.html?id=3D125937">https://rt.perl.org/Ticket/Display.html?id=3D12=
5937</a><br>=C2=A0 60. <a href=3D"http://www.nntp.perl.org/group/perl.perl5=
.porters/2015/09/msg231329.html">http://www.nntp.perl.org/group/perl.perl5.=
porters/2015/09/msg231329.html</a><br>=C2=A0 61. <a href=3D"http://www.nntp=
.perl.org/group/perl.perl5.porters/2015/06/msg228284.html">http://www.nntp.=
perl.org/group/perl.perl5.porters/2015/06/msg228284.html</a><br>=C2=A0 62. =
<a href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231=
254.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg2312=
54.html</a><br>=C2=A0 63. <a href=3D"https://metacpan.org/release/PCM/perl-=
5.23.3/">https://metacpan.org/release/PCM/perl-5.23.3/</a><br>=C2=A0 64. <a=
href=3D"http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg23117=
3.html">http://www.nntp.perl.org/group/perl.perl5.porters/2015/09/msg231173=
.html</a><br>=C2=A0 65. <a href=3D"https://metacpan.org/pod/Encode">https:/=
/metacpan.org/pod/Encode</a><br></div>
--047d7bdc87aa0de1de0520cc2056--