This Week on perl5-porters - 13-19 March 2006

This Week on perl5-porters - 13-19 March 2006

On the move -- Module::Build moving into core -- Perl core moving around the file system -- Threads moving onto CPAN -- plus the usual assortment of bug reports, patches and new ideas.

Topics of Interest

Support for relocating @INC

Nicholas Clark delivered the functionality to make @INC relocatable. This means you can now build Perl, install some modules from CPAN, take the whole directory tree and move it elsewhere and things continue to work. Andy Dougherty wondered how Nicholas had dealt with the shared file.

The answer is that there isn't much that can be done in the general case, although some platforms, like Solaris, make the issues easier to deal with. In other words, Nicholas has done about as much as can be done. Now for testing and feedback.

  A movable feast

Overridable filetest operators (continued)

Salvador Fandio continued to look at the problem of overriding stat, which was now a question of how to deal with the ;$ prototype correctly. Rafael didn't want anything to be changed at this late stage of the game, and instead suggested two new prototypes, ^$ and ^*.

In this scenario, stat would have the latter prototype. (The ^ is loosely based on a concept from the Perl TODO list, which is to allow prototypes to indicate that the routine defaults to using $_ if no argument is passed).

  Prototyping the prototype

Module::Compile and the .pmc file extension

Audrey Tang wrote to explain her position on what .pmc means. Surprisingly, this elicited no discussion.

  Nothing to do with Parrot (yet)

Advice for pack failure needed

H.Merijn Brand was trying to understand why gcc 4.0.3 works, but 4.1.x doesn't when producing a 64-bit perl for HP-UX 11.00 and 11.11. He had stripped a failing test file (pack.t) down to a bare minimum.

He had gone as far as literally unrolling the code from pp_pack.c into straight C using ints and doubles instead of I32s, NVs and SVs, but was well and truly stuck (since this resulting code worked identically on both compilers).

  What we have here is a failure to pack

Move DynaLoader into

Gisle Aas has problems with applications that wish to instantiate an embedded perl interpreter. This is due to the fact that Dynaloader is compiled statically into the perl stub executable. He wanted to move things around a bit so that part of DynaLoader is, well, loaded dynamically.

So far, no complaints.

  Pulling yourself up by the bootstraps

Useless localization of substr warning messages

Hugo van der Sanden was puzzled by new useless localization of substr that blead was now issuing, and wondered what to do about it. Again, no takers.

  What's the use?

Patches of Interest

Term::ReadKey/Term::ReadLine on Windows

Johnathon Stowe produced a patch to fix up the Term::ReadKey/Term::ReadLine bug on the Win32 platform.

VMS-specific arg_defines for ExtUtils::CBuilder

Craig A. Berry sent in a patch for ExtUtils::CBuilder to deal with the requirements of compiling extensions in C on VMS. Ken Williams, the maintainer, took the patch under his wing and asked if there was a test case that could expose this problem, should it ever arise in the future.

John E. Malmberg tweaked Craig's patch to work around a couple of other issues he encountered. In fact John sent in a steady stream of patches for VMS this week. See the In Brief section to catch them all.

A bit more Module::Build help for VMS

Craig then added a patch to help get more of Module::Build's test suite to pass. John received some strange errors that left him puzzled.

SPAGAIN in the poor-man's-multicall API

Robin Houston fixed up multicall.h (in List::Util) to deal with the problem that Tassilo von Parseval had encountered in bug #38644 (a missing SPAGAIN macro call). Rafael applied the patch to blead as change #27486, noting that Graham Barr will have to apply the change to his own repository of List::Util as well.

Sundry fixes from Jan Dubois for Win32

Jan Dubois realised that some of the work he did to make alarm work on Windows 2003 could cause perl go into an infinite loop. He sent in a patch to restore the correct behaviour, and in the process of investigating found another small problem that also needed fixing.

  win32_async_check() fixed

  win32_plclose() fixed

Allocating op-codes from arenas

Jim Cromie landed a first version of patch that would allow op-codes to be allocated from arenas (following on from the discussion last week with Nicholas Clark). There were, nonetheless, a number of issues that will have to be worked through. For instance, it has a nasty tendency to segfault. People were still digesting the patch at summary time.

The continuing story of Andy Lester's quest to const

New and old bugs from RT

overload and rebless (#34925)

Nicholas Clark returned to a bug from last year (which I cannot find again on Xray) dealing with reblessing an object in an overloaded class, and proposed three ways of fixing it, One of them was probably only suitable for blead, and thus 5.10, but two other avenues showed more promise. This is apparently a big issue for Class::DBI.

Nicholas then wrote a patch to implement one of the safer approaches, and if the time it takes to run the test suite is any guide, the performance difference is pretty much lost in the noise.

  The original Perlbug (authentication required)

Debugger Loses Names for Anonymous Subroutines (#38673 update)

chromatic returned to his own bug report, and discovered that by deleting a swath of code in op.c he was able to make it work to his satisfaction, even though he felt slightly uneasy about doing do.

Rafael Garcia-Suarez didn't think much of the idea either and explained a better way of fixing it. He thought it should be feasible to patch the debugger only, the only trouble is that patching the debugger is even more scary.

Another important issue for Rafael is the poor state of $^P (a.k.a $PERLDB) in the perlvar documentation. Someone needs to explain why you would want to diddle the bits, and what happens when you do.

Nicholas Clark admitted to having seen weird thing occurring deep down in the depths of CVs, GVs and stashes, but had never been able to adequately explain why.

  Shades of Moria

SvPOK breaks magic in 5.8.5 and beyond (#38707)

Zowie noted that SvPOK breaks code in PDL, specifically, when looking at things like $#$arrayref.

perl 5.8.8 make fails at dynaloader (#38687)

Dominic Dunlop reproduced the symptoms demonstrated by Andy Ford in the initial bug report by touch(1)ing the Makefile so that an empty file was created. He suggested that Andy delete the directory, make sure there was sufficient free disk space, and start the build again.

  If problems persist, consult your doctor in the morning

localised stash slices are fixed (#38710)

To recap:

  local $::{"func"} = sub { "func" };

worked, but

  local @::{qw/ func1 func2 /} = (sub { "func1" }, sub { "func2" });

... did not. Now it does, thanks to a patch for pp.c from Rick Delaney.

Perl_utf8n_to_uvuni decodes illegal characters (#38722)

John Gardiner Myers uncovered a discrepancy between what Perl_utf8n_to_uvuni decodes (that is to say, Unicode characters) and what Perl_uvuni_to_utf8_flags considers illegal, and provides a short snippet of code to demonstrate the problem. No takers as yet.

Backticks don't work in Win32 multi-threaded perl (#38723)

Krzysztof Koczyjan filed a bug that showed how fork and backticks don't work on the Win32 platform. He traced the problem to the routine win32_popen, which is apparently not thread-safe. He then recompiled perl with -DUSE_RTL_POPEN and saw that that fixes the problem.

syslog-ng inappropriately expects \n (and \0?) in syslog messages (#28019)

Julian Mehnle was chasing down a bug in Debian-land concerning their libmail-spf-query-perl package, and stumbled over the changes made to Sys::Syslog after the Webmin flap. The issue was that the module no longer appended a \n to the logged message, and syslog-ng was running lines together.

Sébastien Aperghis-Tramoni, the maintainer of Sys::Syslog. explained that the current state of affairs was more due to work-arounds for broken commercial Unix syslog implementations, and that the RFCs surrounding these are sadly only informational, and do not mandate a specific way of doing things.

Poor example for $^V in perlvar (#38743)

Nicholas Clark thought that the documentation example in perlvar concerning $^V (perl version) was rather stupid, and hoped someone could come up with a better idea. Dave Mitchell came up with a very clever example that dealt with the hash key randomisation work that went into perl 5.8.1.

  Clues you can use

Undetectable, incompatible API changes in POPpx, etc. (#38744)

John Gardiner Myers sent in a scathing bug report concerning changes to the POPpx macro, which broke his code when running on 5.8.8.

Nicholas Clark replied that no-one who watched the commit go past realised the subtle change in behaviour, nor did anyone pick it up in any of the maintenance snapshots in the three months that followed the change. Similarly, the bug was not caught by anyone who built the release candidate running up to the official 5.8.8 release.

  The importance of testing

Segmentation fault in generating (#38745)

Derek Chen was having trouble building perl on an embedded Linux system running on an ARM processor. Dominic Dunlop wondered whether this could be related to bug #38913, and wanted to know whether previous versions of perl had been built successfully on the platform, or if this was the first time. The next thing to try is to build an unoptimised miniperl.

  Follow-ups in a detached thread

threads.xs broken under PERL_IMPLICIT_SYS; 5.8.8 regression

Jan Dubois sent a patch (for the third time) to free the perl interpreter structure after the threads structure. The latest changes to threads.xs broke this again.

Tels asked for better documentation in the code, and new tests in test suite to ensure that the problem doesn't come back a fourth time.

Jerry Hedden picked up the patch and reworked it slightly. His plan is to get some feedback from CPAN testers before getting it folded back into blead.

qx loses /dev/tty (#38748)

"ende" had a Tcl script hooked up to a perl program running as a daemon which wasn't working. But the equivalent daemon written in shell worked correctly. Dominic Dunlop thought that there might be problems with the program if it really was a daemon, because in that case it would have no controlling terminal and thus no /dev/tty.

Perl5 Bug Summary

  1556 tickets

  Summarised here

New Core Modules

In Brief

John E. Malmberg reported at the beginning of the week that 13 test scripts (of 1140 total) were still generating failures on VMS.

  threads and VMS (redux)

He tweaked thread.h to give threads on VMS a bit more stack space.

And some buffer size fixes for vms.c

And utime (I think I need a what "What John did" section).

Peter Prymmer filed a small patch to fix Pod::Simple on blead so that it works on VMS ODS-2. (Which I understand to be an older file-system for VMS, the current being ODS-5).

Paul Marquess sent in a patch to synch blead with the CPAN versions of Compress::Raw::Zlib, Compress::Zlib and IO::Compress::Zlib.

Someone noted (in bug #34981) that binding STDIN to scalar hides fd 0 forever. I'm not quite sure what they mean by that.

Randy W. Sims nailed an uninitialised value in Archive::Tar.

About this summary

There was some feedback from Marcus Holland-Moritz on last week's summary concerning the issue of DEBUG_LEAKING_SCALARS.

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

If you want a bookmarklet approach to viewing bugs and change reports, there are a couple of bookmarklets that you might find useful on my page of Perl stuff:

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.