This Week on perl5-porters - 19-25 September 2005
Another week of business as usual. The 5.8.8 progesses steadily, bugs
are found in POD, people post ways of making perl do the wrong thing,
and "Test::More" is released.
The continuing saga of blead on VMS
John Malmberg continued his journey making bleadperl work on VMS. This
time he noticed that "ExtUtils::MM_Unix" can use the command 'false'
to indicate falsehood, but that there is no such beast in VMS.
Michael Schwern suggested solving the problem by adding a layer of
indirection, that is, a scalar that hold the command fragment to use,
such as "perl -e 'exit 1'". Peter Prymmer suggested that "exit 44"
would be a superior choice. John then struck back with some killer DCL
to teach us far more than we ever wanted to know about exit codes on
VMS (and admitted that it is a bit ugly) and promised to look at
"perlport", as he suspects that it is probably out of date.
The main thing to remember is that VMS exit codes are like signals.
They can propagate all the way back to top unless the shell script
takes care in trapping them.
It's quite an interesting thread, even if VMS is not your cup of tea.
http://xrl.us/hqx4
John also noticed that the t/io/fs.t triply-linked file test does not
do what the comments says it does. It's actually more about Unix's
"uname" behaviour. Which makes it a bit tricky to figure out what to
do on VMS. One idea was to make the test test what it claimed to test.
http://xrl.us/hqx5
He ended on a high note of proposed VMSish changes, which
appeared to be well received by Craig Berry and Peter Prymmer.
http://xrl.us/hqx6
Doing the version bump
Yitzchak Scott-Thoennes pulled down a copy of 5.8.8 to be and ran the
test suite on cygwin. Things went well, except for a failure in
"op/layers.t" which should be fixed as soon as patch 24767 is landed
in maint.
What went less well is Yitzchak installed it over 5.8.7 by mistake and
expressed desire at seeing the version number being bumped soon to
5.8.8 to prevent this happening to someone else.
Nicholas was reluctant to do so, until such time as the version
numbering scheme makes it exceedingly clear what the official
maintenance releases are, as opposed to a release in the buildup to a
maintenance release. He pointed out that it is the first task on the
TODO "that need a little C knowledge." John Peacock suggested a patch.
The discussion
http://xrl.us/hqx7
The TODO as she stands
http://public.activestate.com/cgi-bin/perlbrowse?file=pod%2Fperltodo.pod&rev=
An oddity in op.c
The blead version of Perl supports the DOR (defined-or) operator "//"
(shamelessly pinched from Perl 6), implemented by Brent Dax. DOR being
so nice to have, H.Merijn Brand backported this patch to maint, and
offers a patch to every version of maint perl (5.8.x) to support it
too. Andy Lester's ongoing consting of blead (and Nicholas's
integration of those patches into maint for 5.8.8) has made H.Merijn's
job more difficult than usual to keep his patch applying cleanly.
As a result of this, H.Merijn spotted some smelly code in the
"S_new_logop" function, and discussed it with Nicholas Clark. It has
been there since 5.8.0 so it must be working, but it seems wrong,
especially when compared to the same code in blead. Jan Dubois thought
the two fragments were semantically equivalent although the blead
version was more robust.
The oddity
http://xrl.us/hqx8
The Cygwin status
http://xrl.us/hqx9
DOR patches for maint
http://search.cpan.org/CPAN/authors/id/H/HM/HMBRAND/
H.Merijn's perl for HP-UX and the DOR repository
http://mirrors.develooper.com/hpux/
ExtUtils::MakeMaker in maint
Michael Schwern wants the latest version of "ExtUtils::MakeMaker" in
maint. Or at least any version which is not two years old. (Michael
has been dragging "EU::MM" into the 21st century for some time now --
in another thread on "perl-qa" he even mentioned that the latest alpha
now emits proper license information into the META.yml file).
John Malmberg gave it a clean bill of health on VMS. Nicholas Clark
recalled some problems with distclean and SDBM_File
http://xrl.us/hqya
License clarification for perlglossary.pod
"perlglossary.pod" is
Based on the Glossary of Programming Perl, Third Edition,
by Larry Wall, Tom Christiansen & Jon Orwant.
Copyright (c) 2000, 1996, 1991 O'Reilly Media, Inc.
Used with permission.
Well, it used to be. Yitzchak Scott-Thoennes wrote to say that Tim
O'Reilly said that the last sentence can be changed to
This document may be distributed under the same terms
as Perl itself.
And there was much rejoicing.
The patch
http://xrl.us/hqyb
The forwarded message from Allison
http://xrl.us/hqyc
Building perl on AIX
Alan Olsen had problems building 64-bit Perl 5.8.7 on AIX 5.2. Campo
Weijerman asked for some information, Alan replied and then nothing
else was heard, so apparently he fixed it. Alan then sent another
message saying that he was having more problems on 5.3 and again Campo
Weijerman came to the rescue. Apparently AIX just won't let you build
perl with "-Duse64bitall" and "-Duseithreads". AIX is strange.
http://xrl.us/hqyd
File::Find::find and {follow => 1} on Win32
Steve Hay reported in bug #37223 that it doesn't work, and that
"follow" and "follow_fast" should be no-ops on Win32, since the file
system doesn't support symbolic links.
Rafael Garcia-Suarez couldn't believe nobody had noticed it until now.
Steve Peters guiltily raised his hand and pointed to patch #23510.
http://xrl.us/hqye
Fixing pod/pod2usage2.t
Merijn sent in a patch for "pod/pod2usage2.t" but the attachment was
eaten by a grue. Nicholas pointed out that the "perl.org" MTA eats
anything that looks like "/\.t$/". Newsflash: apparently now fixed.
Merijn resent the patch with a ".txt" extension, but it still contains
a Unixism ("open(IN, "-|")" that doesn't work quite right on Win32. He
remembered that "t/op/write.t" has a workaround for this.
http://xrl.us/hqyf
Regexp stack overflow in 5.8.7
Brian Candler reported bug #37230 where
"^"(?:[^"\\]|\\.)*"\s+\d+\s+(\d+)" (used to munge Apache log files)
bombed out with deep recursion, and he couldn't see why the engine
would want to backtrack (notably, over the "(?:[^"\\]|\\.)" bit -
"anything except a double quote or backslash, or a backslash followed
by anything.")
Hugo van der Sanden explained that the engine lacks the capacity to
analyse the alternations and see that they are mutually exclusive.
Abigail suggested using "/"[^"\\]*(?:\\.[^"\\]*)*"/s" instead, since
it removes all alternations. Brian reported that with a sufficiently
long target string, this expression will still cause perl to dump
core. Yitzchak suggested "/"[^"\\]*(?>\\.[^"\\]*)*"/s" as an
alternative (The rarely used, rarely understood "(?>...)" assertion).
Brian said that that one dumped core too. Abigail concluded that
sometimes, core dumps happen.
http://xrl.us/hqyg
Too late for INIT
Hugo wondered why perl refuses to run INIT blocks, simply because a
module has been loaded via "require" rather than "use", and thought it
an odd wart. Rafael suggested adding a "UNITCHECK" code block, that
would be run regardless of how the module was loaded.
The thread
http://xrl.us/hqyh
Possible source of Hugo's question, from Perlmonks
http://www.perlmonks.org/index.pl?node_id=494439
Another major bug in PerlIO
Ilya Zakharevich wrote in to say that he thought it must be easier to
rewrite the PerlIO layer from scratch rather than attempt to fix bugs
in it.
unix2dos .tcshrc | \
perl -we 'binmode STDIN, ":crlf" or die;
print while read STDIN, $_, 32000'
Looks simple, but it doesn't work. He truss'ed the program and
observed two seeks and read for each converted line ending, which of
course does wonders for performance. Nick Ing-Simmons replied, saying
that what was needed is an efficient version of ":crlf".
http://xrl.us/hqyi
Kill mv-if-diff?
Nicholas Clark raised the issue of "mv-if-diff", a little shell script
hack used by "make" to avoid damaging the timestamps on auto-generated
files, if the contents haven't actually changed.
He noted that on a clean rebuild, "lib/unicore/mktables" is run 7
times (when only once would suffice). It gets much worse after editing
a file and rebuilding. Cascading effects cause a merry-go-round of
files being rebuilt.
And parallel makes are also broken. (The summariser, having access to
a six-CPU box, can confirm that a "make -j 18" causes spectacular
fireworks). Nicholas wonders if these two observations are related,
and that things might be a whole lot better if "mv-if-diff" was simply
thrown away.
Steve Peters thought it was a symptom of insufficient targets and
dependencies to keep track of the build. Russ Allbery thought it was
"mv-if-diff" that was lacking in capability, because otherwise it
would do The Right Thing. Vadim Konovalov suggested a heavy
engineering approach with additional helper files.
Joshua Juran identified the problem as being the issue of attempting
to manage two pieces of information (the date a file was changed, and
the date it was confirmed up-to-date) in the same slot. The Macintosh
filesystem has a backup date field on files which could be pressed
into service for this, but that is non-portable. His second suggestion
was to throw away the broken optimisation that is "mv-if-diff".
Yves Orton brought patches 24004, 24056 and 24320 back up on the
radar, saying that all this business is probably the cause of those
patches.
http://xrl.us/hqyj
New modules
Michael Schwern announced "Test::Simple/More/Builder" version 0.61.
Lots of new goodies and fixes.
http://xrl.us/hqyk
Using Test::More to test Math::Complex
Jarkko Hietaniemi wanted a pair of fresh eyes to take t/Complex.t from
"Math::Complex" and rewrite it using "Test::More". Michael Schwern
sketched out briefly how it might be done. Since the data for the
tests are stored in a "__DATA__" section of the script, Jarkko wanted
a test failure to display something like:
not ok 123
# Failed test in Complex.t at line 56, <DATA> line 1234.
# got: '1+2i'
# expected: '1+i'
Michael showed how this could be approximated to a first degree using
"diag()", but that the real solution would be to override
"Test::Builder"'s diagnostics, but that it's not yet quite flexible
enough to do that.
http://xrl.us/hqym
In brief
Smylers filed bug #37199 relating to mangled POD in "File::Basename"
and Steve Hay replied that the problem had already been fixed in
blead.
Dan "Unstorable" Kogai noted that $Storable::drop_utf8 seems
ineffective on Perl 5.8.x, and went on to say why, supported by code
fragments in Perl and C. He wondered whether the code or documentation
should be fixed. He was Warnocked.
http://xrl.us/hqyn
Yitzchak sent in a patch to silence a couple of compiler warnings
(three out of seven). Rafael fell asleep at the wheel and had to be
pinged to apply it two days later.
http://xrl.us/hqyo
Paul Marquess supplied a patch to sync "Compress::Zlib" 1.40 with
core. Patch applied with alacrity by Rafael.
http://xrl.us/hqyp
Alex Davies reported a memory leak in #37231 when eval'ing
syntactically incorrect code.
while (1) {
eval "sub { \$foo = "; # closing } missing
}
... the above will rapidly consume all available memory (don't try
this at home). No takers yet; Dave Mitchell must be busy doing
something else.
"lace" reported in #37250 that "pod2html" does not produce
XHTML-conformant code.
http://xrl.us/hqyq
Jan Hudec posted more ways of making perl panic, but cheated by using
UTF-8 in the PerlIO layer.
http://xrl.us/hqyr
Taro Kawagishi found a problem with "perlfaq3" "How do I find which
modules are installed on my system?", and supplied code to deal with
the case when a directory path listed in @INC is a symbolic link.
http://xrl.us/hqys
Steve Peters posted a patch (#25571) to get "PERL_DEBUG_COW" (Copy On
Write) working correctly on the smoke tests.
http://xrl.us/hqyt
About this summary
This summary was written by David Landgren.
Information concerning bugs referenced in this summary (as #nnnnn) may
be viewed at http://rt.perl.org/rt3/Ticket/Display.html?id=nnnnn
Information concerning patches to maint or blead referenced in this
summary (as #nnnnn) may be viewed at
http://public.activestate.com/cgi-bin/perlbrowse?patch=nnnnn
Weekly summaries are published on http://use.perl.org/ and posted on a
mailing list, (subscription: [EMAIL PROTECTED]). The
archive is at http://dev.perl.org/perl5/list-summaries/. Corrections
and comments are welcome.
If you found this summary useful or enjoyable, please consider
contributing to the Perl Foundation to help support the development of
Perl.