This Week on perl5-porters - 19-25 September 2005

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.

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.

He ended on a high note of proposed VMSish changes, which appeared to be well received by Craig Berry and Peter Prymmer.

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

  The TODO as she stands

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

  The Cygwin status

  DOR patches for maint

  H.Merijn's perl for HP-UX and the DOR repository

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

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

  The forwarded message from Allison

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.

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.

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 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.

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.

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

  Possible source of Hugo's question, from Perlmonks

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.

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.

New modules

Michael Schwern announced Test::Simple/More/Builder version 0.61. Lots of new goodies and fixes.

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.

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.

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.

Paul Marquess supplied a patch to sync Compress::Zlib 1.40 with core. Patch applied with alacrity by Rafael.

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.

Jan Hudec posted more ways of making perl panic, but cheated by using UTF-8 in the PerlIO layer.

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.

Steve Peters posted a patch (#25571) to get PERL_DEBUG_COW (Copy On Write) working correctly on the smoke tests.

About this summary

This summary was written by David Landgren.

Information concerning bugs referenced in this summary (as #nnnnn) may be viewed at

Information concerning patches to maint or blead referenced in this summary (as #nnnnn) may be viewed at

Weekly summaries are published on and posted on a mailing list, (subscription: The archive is at 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.