develooper Front page | perl.perl5.porters | Postings from February 2006

This Fortnight on perl5-porters (6-19 February 2006)

Thread Next
From:
David Landgren
Date:
February 24, 2006 13:10
Subject:
This Fortnight on perl5-porters (6-19 February 2006)
Message ID:
43FF7618.5020806@landgren.net
This Fortnight on perl5-porters - 6-19 February 2006

   Andy Lester continues his quest to const -- Jim Cromie refines his
   arena patch -- Module::Build causes a large increase in the use of
   Internet bandwidth

   This summary uses a new, experimental organisation. The previous
   method was more-or-less chronological, with minor threads moved to the
   In Brief section. The new method is to First summarise *ad hoc*
   threads that spark off some sort of discussion. Then come the patches
   sent in by people (the idea being that no patch be left unnoticed, to
   offer a checklist for pumpkings), followed by discussions of bugs
   posted to RT.

   After that come the usual New Releases, Bug Summary and In Brief
   sections. Feedback on this new arrangement is welcome.

Topics of Interest

The Great Unicode Slowdown

   Back on February 1, Nicholas Clark started to work on the slowdown
   that occurred between the 5.8.6 and 5.8.7 releases when dealing with
   Unicode.

     http://xrl.us/j63g

   The problem is one of excessive shuffling of data behind the API, and
   Nicholas proposed an additional function to the API to minimise the
   amount of copying required. Sadahiro Tomoyuki came up with a better,
   more pragmatic solution that Nicholas came to like, and then found a
   couple optimisation possibilities that need to be thought about.

   He then wrote some code to implement one of the optimisations for
   "index", but sadly Phil Pennock replied that it only had a negligible
   effect on his code. Tomoyuki explained why this was so, and offered a
   couple of work-arounds. Phil penned a long reply, explaining what he
   was trying to do, basically, to "unobtrusively write Unicode-aware
   scripts for general deployment, with full diagnostic support, which
   don't require special setup, do deal with user locales, and will work
   on any moderately recent version of Perl without going tits-up".

   Nicholas noted that one of the problems was that "-C" (the
   semi-repurposed switch for diddling with Unicode) doesn't work on the
   shebang line (with a "too late" warning la taint), and wondered how
   difficult it would be to remove the restriction, which is mainly a
   minor implementation issue. Rafael Garcia-Suarez noted that there
   might be problems due to the fact that by the time the shebang line is
   process, "stdin", "stdout" and "stderr" are already open (and "-C"
   could have an influence on the way they are opened). Nicholas wasn't
   convinced, mainly because the tokeniser itself remains very primitive
   in its 8-bit/UTF-8 awareness and handling.

   Rafael point to bug #34087, where H.Merijn Brand reasoned that the
   only sensible course was to ban "-C" on the command line, much to
   Abigail's disappointment at the time.

   The thread ended with Nicholas. Tomoyuki and Dominic Dunlop discussing
   encoding pragmas, "Perl_sv_recode_from_utf8" and the old ISO 646 7-bit
   character sets.

     I want my cycles back
     http://xrl.us/j63h

   At the same time, "ags" filed bug #38595. showing how "use encoding
   'cp1250'" cause regular expressions to run much more slowly than
   without.

     Slow Unicode regexps
     http://xrl.us/j63i

Cleaner Arenas

   Jim Cromie continued to put in a lot of work on the arena code. (An
   arena is a section of memory from which blocks of a fixed size are
   allocated. Relying on this constraint simplifies the housekeeping
   significantly and can improve performance).

   Nicholas picked up a thread from last week asking where Jim was
   planning to go with the code, noting that a critical C structure
   ("struct body_details") exposes probably more implementation details
   than is wise. Jim punted the issue, citing pending patches to be
   delivered. Both Nicholas and Jim agreed that ideally nothing of the
   implementation details should leak out through an API (which would
   then allow internals to be revamped during stable releases), but that
   allowing a certain amount of inspection, such as for modules within
   the "Devel::" namespace, is a legitimate wish.

   Jim did let on that his Grand Scheme concerning "body_details" was to
   allow for a much simpler "sv_upgrade" (the means by which a lowly
   scalar "SV" gets converted into a float, a reference or more).

   For a while Nicholas and Jim wondered whether the microphone was
   switched on, since no-one else had commented, so Yitzchak
   Scott-Thoennes said that everyone was awed into silence.

     Repairing arenasets
     http://xrl.us/j63j

   Later on, Jim posted a patch that laid the groundwork for further
   work, which he hoisted out in order to facilitate peer review, the
   ability to tweak arenas independently, added two new arenas for
   datatypes that were previously allocated dynamically as a result of
   that, and reorganised how one looks up the size of an arena's type.

   Tels commented on the readability of the code, which Jim explained was
   a result of the use of macros throughout the code. And it got Jim
   thinking about whether some of the magic numbers used in the arena
   code should be upped during configuration time for 64 bit systems.

     Laying the groundwork
     http://xrl.us/j63k

     Reclaim an C<HE_SVSLOT>, save some bytes
     http://xrl.us/j63m

     No smoke here
     http://xrl.us/j63n

   Jim posted another patch to make arenas adjust their size to fit N
   bodies exactly, avoiding wastage for a certain number of data types.
   At this point he called for help, as he wasn't sure how to initialise
   "PL_arena_sizes[]" nor how to clone it (for threads).

     Looking for clues
     http://xrl.us/j63o

   And after all that effort, Jim generated a consolidated patch to tie
   all the loose ends up together and bring everything under one roof.
   Yves Orton tested the patch and gave it a clean bill of health on
   Win32.

   Unfortunately, Nicholas found that it came to grief on t/op/threads.t
   and he pondered how to fix it. After a few false starts he figured out
   how to proceed, and most of it went in as change #27215. Yay!

   What is needed now is for people to take blead for a spin with large
   datasets (something the test suite doesn't really do).

     The Full Monte
     http://xrl.us/j63p

(Not) building XS modules with MS Visual Studio 2005

   Yves "demerphq" Orton described the problems he had encountered with
   someone trying to build an XS module with MS Visual Studio 2005 and
   ActiveState build 815 (their most recent 5.8 distribution).

   For some modules, such as his own "Data::Dumper::Streamer" and the
   core "Data::Dumper", the source is compiled (albeit with a certain
   amount of warnings), a DLL is produced, but "Dynaloader" fails to load
   it. For other modules, such as "Scalar::Util", the linker fails with
   an error about an "unresolved external symbol "_Perl_seed"".

   Steve Hay suggested trying to invoke "nmake" as "nmake CCTYPE=MSVC70"
   which might be sufficient to pull things off, otherwise some work will
   be required to define a new "CCTYPE" of "MSVC80" in order to bring the
   code and compiler into agreement.

   Steve also pointed out that since ActiveState currently build their
   perl executable with VC6, one really should build XS extensions with
   VC6 as well. Using VC7 can be fraught with peril, and now with VS 2005
   being equivalent to a VC8, the mismatch in C run-time libraries may be
   getting to the point where things just do not (and cannot) work any
   more.

   Jan Dubois analysed the points Yves raised in turn and explained why
   things were failing and what to do about them.

   Jan also provided a bit more information about which compiler versions
   and their attendant run-time libraries work with perl, and which ones
   don't (in brief: don't write XS in C++). Steve noted that he had had
   trouble most notably with file descriptors (perl thinking a file was
   open, XS thinking it was closed) when compiling XS with VC7 when perl
   was compiled with VC6.

     Oh no! not another DLL hell!
     http://xrl.us/j63q

Unused "Perl_save_*" functions

   After running some coverage analysis, Nicholas discovered that a slew
   of functions "Perl_save_svref", "Perl_save_long", "Perl_save_I16" and
   the like were unused, and wondered whether they had to remain, in
   order to support legacy XS code. Depending on the answer they could
   either be deleted or moved to mathoms.c (the graveyard for ye olde
   retired functions).

   Rafael Garcia-Suarez ran a gonzui search and found nothing, but also
   reasoned that since they're part of the public API, there's nothing
   stopping an XS author from saving arbitrary data on the stack. So he
   thought it would be fine to move them over to mathoms. On the other
   hand, if they were removed, that would cascade a certain amount of
   "enum" cruft as well.

   Nick Ing-Simmons mentioned that "Tk" (naturally) uses "save_svref" for
   some nefarious (but quite legitimate) purposes, but was quite happy to
   see them move to mathoms.c.

     Save the mathoms
     http://xrl.us/j63r

Making "U" magic available for hashes

   Anno Siegel sent in a long message, describing how he wanted to apply
   "PERL_MAGIC_uvar" or "U" magic work with hask keys. The aim was to
   provide some more support for inside-out objects. This would be a
   cleaner approach than using tied hashes. Instead, from the key one
   would be able to get to the reference in a more direct manner.

   And instead of just waving his arms and saying how good it would be,
   Anno supplied a patch against 5.9.3 showing some proof-of-concept code
   and asked for feedback.

   Yves noticed the parallel between this work and the work he did when
   putting the trie optimisation into the regexp engine, but also that
   using reference addresses are apparently not recommended in threaded
   environments.

   Rafael poked at the patch and asked for some example code, to allow
   him to weigh up the benefits. Anno delivered a couple, and then went
   back to work on refining the concept.

     Magic-U-Like
     http://xrl.us/j63s

"pp_bit_and", "pp_bit_x?or" and "USE_LEFT"

   Nicholas found an interesting discrepancy between a trio of functions
   in pp.c. On the one hand "pp_bit_and" does one thing, whereas
   "pp_bit_or" and "pp_bit_xor" throw a ternary operator into the works
   for what is otherwise very similar code. It's been there a long time,
   is touched upon in bug #17809 and Nicholas wanted to know more.

   No-one appeared to remember anything about it at all.

     Lost in the mists of time
     http://xrl.us/j63t

"DESTROY" never dies

   Stas Bekman noted that

     perl -le 'my($x,$y) = (1,0); my $z=$x/$y; print "done"'

   dies with "Illegal division by zero" but on the other hand

     package A;
     sub new {bless {},'A'};
     sub DESTROY { my($x,$y) = (1,0); my $x = $x/$y }
     my $X=A->new;
     print "done"

   produces the output "done". The die has been eaten, and the person
   running the program has no idea that anything is amiss.

   Unfortunately, Stas was Warnocked on this issue.

     http://xrl.us/j63u

   Never one to let such a trifling matter bother him, Stas filed a bug
   report:

     http://xrl.us/j63w

Benchmarking the effect of build options

   Linda Walsh wanted to know if there was a package that would let her
   benchmark the results of different build options, such as compiler
   optimisation levels, enabling threads and the like.

   Jim suggested using "Test::Smoke" as a starting point, and make it run
   "perlbench" instead of "make test". H.Merijn Brand added some of his
   own conclusions he'd made along these lines, and whipped up a small
   program to extract the times of the different runs in a smoke test,
   and produced some interesting figures as a starting point.

     http://xrl.us/j63x

Why "ref(qr/foo/)" is "Regexp"

   John P. Linderman looked through all the POD he was able to, but was
   unable to find where it was explained that "qr/foo/" is of type
   "Regexp" and thought that it should be mentioned.

   Yves pointed out that code is free to bless a Regexp into another
   package, which means that its "ref()" will then return the name of the
   other package. In fact, when this happens, there is no way of
   determining that something that set out as a "Regexp" but has since
   been blessed as something else, was, at the outset, a "Regexp".

     There must be some way of making an obfu out of this behaviour
     http://xrl.us/j63y

"Module::Build", "CPAN.pm", "ExtUtils::MakeMaker" and "UINST=1"

   Randal L. Schwartz wrote in to say that with recent versions of all of
   the above he was not able to install "Zoidberg" and wanted to know
   whether it was "Module::Build"'s fault.

   A massive thread resulted from this simple question, and happily it
   did not devolve into a flame war, at least not too much. There are two
   points of view, each with their merits. But since the two viewpoints
   are not diametrically opposed, at times the parties seem to be talking
   at cross purposes.

   Tels saved the day by summarising it nicely, so I shall point you to
   his summary:

     The thread
     http://xrl.us/j63z

     The thread, accord to Tels
     http://xrl.us/j632

Revisiting the saving of the regexp state

   Nicholas Clark had been looking for where code deals with $1 and found
   some code in mg.c and wondered if there was code elsewhere that
   diddled with these number variables directly.

   This week he understood why his proposed optimisation wouldn't fly.
   Which got him thinking about another approach. Which he also figured
   wouldn't work either.

   In related work, a patch that had been stuck in limbo was applied.
   Neither Nicholas nor Rafael nor Robin Houston were certain the patch
   was perfect, but reasoned that smoke tests should be sufficient to
   test it. That, and testing CPAN modules with "blead".

     Back in January
     http://xrl.us/j633

     And fast-forward to now
     http://xrl.us/j634

     More voodoo
     http://xrl.us/j635

Mac OS/Lamp port sources available

   Joshua Juran posted the address where people could download the Lamp
   port of perl 5.6.1, (I believe this is the result of reviving the old
   MacPerl port).

     Where to get it
     http://xrl.us/j636

     System requirements
     http://xrl.us/j637

PERL_XSUB_OLDSTYLE

   Nicholas Clark wanted to know what old style XSUBs were. They appear
   to be so old as to be not used any more. Nick Ing-Simmons was quite
   convinced that this was the case. And he should know, having written
   "Tk" as one of the first 5.000 extensions, and it used the new calling
   conventions... Andy Dougherty agreed, saying that his only
   recollection was of Malcolm Beattie's own pre-5.000 "Tk" module used
   the original XSUB style, and "PERL_XSUB_OLDSTYLE" was an effort to
   continue to keep it working.

   Nicholas fired up the chain-saw.

     http://xrl.us/j638

Patches of Interest

Patches from Debian for 5.8.8

   Brendan O'Dea kindly posted the patches that Debian have been carrying
   along on that distribution's Perl package. The points are: a patch for
   insecure temporary files, a POD edit, a precedence fix, a patch for
   long lines in /etc/groups and a redundant compiler flag on the "sparc"
   platform.

   Gisle Aas noted that all but one patch were already in "blead", but
   punted on the "\x{2010}" POD/"groff" patch, soliciting the opinion of
   others. Brendan pointed out that the patch was for verbatim text,
   which is usually code, hence it should be left untouched, and that
   Russ Allbery had solved the problem in a different way in the current
   version of podlators.

   Nicholas Clark noted that the long lines bug merely requires a merge
   of reentr.pl which has drifted significantly between "maint" and
   "blead", which is apparently not for the faint of heart. This script
   is used to generate reentr.h and reentr.c which in turn allows the
   perl codebase to abstract away the differences in the thread-safe
   (re-entrant) versions of various system calls.

   Now that "podlators" had been fixed to allow the re-use of parser
   objects, Nicholas has less objections about merging it into maint,
   which would fix the POD problem, although Yitzchak pointed out that
   the code in the "SYNOPSIS" section of old "Pod::Man" doesn't yet work
   as advertised. And after a bit of prodding from Russ, Yitzchak coughed
   up an exhaustive list of all the niggly compatibility problems that
   need to be addressed. But pointed out that some of the issues may have
   been conscious design decisions to drop functionality deemed to be
   useless (but if so then it should be mentioned explicitly). Russ said
   that the goal was to emulate the old interface completely (so I expect
   we will see subsequent releases of podlators addressing these issues).

     De patches from Debian
     http://xrl.us/j639

Fixing broken "valgrind" targets in "make"

   Jim Cromie noticed that a number of targets, such as "test.valgrind",
   "check.valgrind" and the like did not all work correctly (that is, at
   all), and proposed a patch to make them work again. ("valgrind" is a
   tool to track down illegal memory accesses, usually caused by errant
   pointers). Patch applied by Steve Peters as change #27128.

     Grinding into emptiness
     http://xrl.us/j64a

What Andy Lester has been doing

   Andy Lester delivered a number of patches during his quest to const.

     Marking unused arguments (applied as #27129)
     http://xrl.us/j64b

   Nick Ing-Simmons cautioned that the following patch might break Win32.
   Yves said that he'd happily smoke anything from people who needed to
   verify Win32 compliance. Nicholas wondered whether Steve Hay's and Abe
   Timmerman's smoke tests were sufficient to uncover problems. Jan
   explained what recipe was needed in general when doing XS work on
   Win32, confirming that Andy's patch did no harm. Jim Cromie sent in a
   snippet from his "Test::Smoke" configuration to show how he smokes
   these things. Not applied.

     Removing unused contexts
     http://xrl.us/j64c

     And then some more, still no takers
     http://xrl.us/j64d

   Andy took a fresh stab, this time removing "pTHX"s, redoing the
   "s/Nullop/NULL/" change and sundry "const"ing thrown in for good
   measure. This was applied as change #27136.

     http://xrl.us/j64e

     And then some stuff from perly.patch
     http://xrl.us/j64f

   Now that many "pTHX"s are no longer, some arguments need to be marked
   explicitly as unused in order to silence warnings for the Sun Studio
   compiler. Rafael realised that this patch would break non-threaded
   builds, so Andy went away to cook up a better batch.

     A first attempt at linting, not applied
     http://xrl.us/j64g

     In which perly.c is examined (not applied)
     http://xrl.us/j64h

     And some POD rewording (change #27174)
     http://xrl.us/j64i

     More lint removal (change #27177)
     http://xrl.us/j64j

     The end of the line of the Nullxx macros (change #27238)
     http://xrl.us/j64k

Better long path name support for VMS

   John E. Malmberg supplied some patches against "blead" to make long
   path names work in "readdir" and the like for VMS:

     http://xrl.us/j64m
     http://xrl.us/j64n

Better "xcopy" support for Win32

   Yves Orton supplied a patch to suppress "xcopy" from prompting every
   two seconds when rebuilding on Win32. Which I can see would get you
   down over the long run. Applied as change #27195, with the proviso
   that it makes life more difficult for the Windows 9x platforms.

   So: Warning to all Windows Millenium and Windows 95 users: recompiling
   perl on your platform will now cause you grief and undue suffering.
   (But hey, you knew that already).

     http://xrl.us/j64o

"Hash::Util" enhancement

   Yves also sent in a large patch to add some functionality to
   "Hash::Util". Applied as change #27180.

     http://xrl.us/j64p

Patch for perl to compile/work on DragonFlyBSD

   Robert Sebastian Gerus sent in a patch to make perl compile correctly
   on the DragonFlyBSD platform. H.Merijn Brand applied it as change
   #27189.

     Whee! Another platform supported
     http://xrl.us/j64q

     More on DragonFly
     http://www.dragonflybsd.org/main/

"stat()" and trailing slashes on Win32

   Jan Dubois noticed that "stat" behaves differently on windows when
   statting a directory, according to whether the directory to stat has a
   trailing slash or not. So he posted a patch to canonicalise the names
   to sane values.

   This was applied by Rafael, but it sparked off a long thread, where we
   learn that Windows allows hard links (although the method to achieve
   them is somewhat cumbersome) and there are problems in getting the
   timestamps up to date when "the other" link updates the file.

   Yves disliked the fact that statting a file required it to be opened
   and closed, in order to force the timestamps to be refreshed, as it
   incurs a significant performance penalty. Worse, as hard links are so
   rare, (since the means to create them are all but invisible to mere
   mortals), this high cost is paid every time for what is literally a
   *can't happen* event. He wanted to have some mechanism whereby the
   open and close timestamp refresh trick could be skipped by default,
   but that by flipping a bit the check could be re-enabled if needed.

   Jan Dubois came up with the best idea: using sitecustomize.pl, which
   was invented to solve exactly this sort of problem.

     http://xrl.us/j64s

A test case for "Pod::Plainer"

   chromatic sent in a simple test case for "Pod::Plainer", with the
   desire to see Schwern poorer. Read the second link to understand what
   this is all about.

     The patch
     http://xrl.us/j64t

     Schwern throws down the gauntlet
     http://xrl.us/j64u

t/op/stat can fail under Darwin

   There's a test in t/op/stat that can fail on Darwin. It tests that
   "ctime == mtime", except that it is possible to see 1 second
   differences on "HFS+" file systems. Anno Siegel patched the test to
   have Darwin skip it, and pointed out that ideally the test to see
   whether the test should be skipped should be based on the type of
   filesystem the test is being run on, not the type of operating system.

   Rafael applied the patch, but pointed out that such testing for the
   filesystem would be... difficult.

     http://xrl.us/j64v

Patches: B, CGI, ExtUtils::MM_Unix

     http://xrl.us/j64w

     http://xrl.us/j64x

[PATCH] Make SDBM_File work with -Duse64bitall on Darwin (Mac OS X)

     http://xrl.us/j64y

[PATCH] Trouble with $ENV{CDPATH} after change #27236

     http://xrl.us/j64z

New and old bugs from RT

Script misses EOF on Solaris (#1734)

   Steve Peters visited a venerable (seven year old) bug, and confirmed
   its potency on Solaris. The test script reads its own program as input
   (but I imagine any file open for read would do), and then forks off a
   child, and the child prints out its line and then exits. On a number
   of operating systems it works as expected (that is, it halts after
   having read the last line of input) but on Solaris (and Unixware) when
   it gets to the last line it starts over at the beginning.

     http://xrl.us/j642

   Alan Burlison pointed to another discussion on the matter

     http://xrl.us/j643

   where it transpires that a child should call POSIX::_exit instead of
   exit. Do that, and the problem goes away.

"use locale" has no effect (#2200)

   Six years ago, "gomar" noted that the behaviour with "use locale"
   started to have no effect prior to 5.6, but that it worked in
   5.005_03. Steve Peters observed that it now worked correctly in 5.8,
   so the fix was made somewhere between 5.5.650 and 5.8 (and the Changes
   file should reflect it).

   Yves Orton wondered whether Steve was seeing the same glyphs in his
   mail client that Yves was seeing in his, because what Yves saw of
   Steve's tests didn't look the same as the original poster's tests. The
   kind of thing that makes one pine for 7-bit ASCII.

     http://xrl.us/j644

"PAR", "autouse", and 64-bit Linux (#38441)

   Philippe Schaffnit reported the difficulty he was having when
   producing stand alone executables with PAR that use "autouse". The
   symptom he was encountering was

     Can't locate autouse.pm in @INC

   Nick Ing-Simmons described a couple of basic checks to carry out,
   which Philippe wondered how to do. Nick replied that his usual
   technique was to run the program in question under "strace" (or
   "struss" depending on your operating system) and then grep the
   resulting output, looking for the offending ".pm" file.

     http://xrl.us/j645

Coredump when starting "webmin" (#38449)

   "kamy" noted that "webmin" dumps core when run by 5.8.7. Steve Peters
   replied that the best option was to patch the current version with a
   series of patches and upgrade "Sys::Syslog", or perhaps more simply,
   upgrade to 5.8.8. Webmin itself should also be upgraded to 1.269.

   This resolves the issues surrounding the buffer overflows discovered
   in Webmin and Perl last year. And if you have a Webmin installation,
   you should do the same.

     http://xrl.us/j646

"chdir()" and filehandle parameters (#38457)

   Peter Dintelmann discovered that the new functionality for "chdir"
   when the argument is a filehandle, as in:

       open F, '/tmp' or die $!;
       chdir F or warn $!;

   doesn't work, although "chdir *F" and "chdir $fh" do. The problem is
   that perl considers "F" to be a bareword in this context, which leads
   to a "Bareword "F" not allowed" error. Rafael was pretty sure that a
   very minor edit to opcode.pl would declare it legal in "blead", but
   was worried about backwards compatibility issues if it were allowed in
   "maint".

   Gisle took a stab at making it work by mirroring how perl deals with
   the task of truncating a file handle, but discovered that things were
   trickier than they first appeared.

   Nicholas considered that the semantic change of "chdir foo" was to
   great to be allowed to go into "maint". Nick Ing-Simmons was sure it
   would cause trouble.

     Taking a crack at it
     http://xrl.us/j647

   Peter replied via RT, arguing that "stat()" and "truncate()" already
   behave this way, and that this would provide more consistency.

   Gisle said that the patch was in blead, precisely on the basis of the
   argument of consistency. He also pointed out that "chown", "chmod" and
   "utime" do not currently accept filehandles, but they are documented
   as taking LISTs as arguments. Between changing the functions to allow
   globs as argument or pinning down the semantics more precisely with a
   documentation patch, Gisle voted for the latter course of action.

   Nicholas began to regret having merged the initial
   dirhandle/filehandle patches from "blead" that opened up this can or
   worms. Gisle was more optimistic, saying that bareword file handles
   are legacy and should not be used in new code anyway. (Note to self:
   do not let Gisle see my code).

     Inconsistent consistencies
     http://xrl.us/j648

"chdir()" and closed filehandle parameters (#38457)

   Peter also discovered that

     open $f, '/tmp' or die $!;
     close $f;
     chdir $f or warn $!;

   produced the warning "something's wrong", and attached a patch to
   change the warning to "chdir() on closed filehandle". Rafael liked the
   concept, and eventually applied it to "blead" as change #27130.

     http://xrl.us/j649

     A puff of smoke is seen
     http://xrl.us/j65a

   On a roll, Peter also thought about the "Cwd" module, which offers a
   version of "chdir" that $ENV{PWD} synchronised with directory changes.
   As might be guessed, the following doesn't work:

     # assuming the script is run from /var/tmp (or elsewhere)
     open $f, "/tmp";
     chdir $f;
     print $ENV{PWD}; # prints /tmp/GLOB(0x233b8)

   Apparently no fixes forthcoming at this time.

     http://xrl.us/j65b

"@-" contains garbage after a failed match (#38461)

   Lukas Mai posted a bug report with an aptly-named wtf.pl that goes
   something like

     for my $re (qr/fo/, qr/a/) {
       'foo' =~ /$re/;
       print scalar @-, "\n"; # prints some huge number
       print "@-\n";          # eats all available memory
     }

   Works okay the first time through the loops, comes to grief the second
   time. Yves Orton diplomatically suggested that while this was perhaps
   not a very desirable outcome, if one does not take the pains to check
   whether the match actually succeeds then one shouldn't expect "@-" to
   contain anything useful. Lukas replied that he would settle for
   "undef" or an empty list, rather than garbage.

   Nicholas tried to attack the bug, but whenever he looked at it with a
   debugged build the problem went away, which led Andreas to notice the
   similarity between this bug and another one (#38363) that he had been
   working with the same kinds of symptoms.

   After going through a bit of pain, Nicholas spotted what he hoped was
   the root of the problem, and committed a one line change (#27133) to
   fix it.

     http://xrl.us/j65c

A curiously lethal regular expression problem (#38470)

   Nigel Sandever posted a short piece of code that uses "pos" and a
   moderately large string. It loops for a while (or not at all) and then
   dies with a core dump. Nigel and Nicholas identified the problem as
   runaway recursion in the regexp engine. For the time being the
   work-around is Don't Do That Then.

   Here's hoping that Dave Mitchell greps for his name in the summaries
   when he gets back on the net.

     http://xrl.us/j65d

"Data::Dumper" only warns on unhandled reference types (#38484)

   Give "Data::Dumper" a weird reference type it doesn't know how to
   handle, and it will spit out a warning, but then goes on to emit some
   nonsensical Perl code that may not even compile. Nicholas thought that
   "Data::Dumper" should have the good grace to up and "die" if unable to
   do anything sensible.

   Yves thought it was a bug, since the pure-Perl "Data::Dumper"
   implementation correctly dies under the same circumstances. He also
   was interested in knowing what to do, since his own module,
   "Data::Dumper::Streamer", didn't cope with the construct either.
   (Which is *STDOUT{IO} in the bug report).

   Nicholas wasn't sure what to do either, noting that even perl itself
   has a fit when it tries to dereference such a beast, as in "$x =
   ${*STDOUT{IO}}".

   Yitzchak made a small fix to pp.c to make things die more gracefully.

     http://xrl.us/j65e

"use integer; 0x80000000/-1" (#38485)

   Inspired by something he heard on "perl6-internals", Nicholas
   discovered that

     use integer;
     0x80000000/-1;

   will dump core with a floating point exception, at least on x86
   hardware running FreeBSD. He wanted to know whether it was worth
   trapping, and dying with a more useful error, akin to dividing by
   zero. Steve Peters discovered that a number of different platforms
   puked over the code in strange and entertaining ways, but reflected
   that it were best they all died the same way, so he committed change
   #27155 to do just that.

   Yitzchak Scott-Thoennes hated that, since it meant that now systems
   would die on the error, despite the fact that before the patch was
   added, they would have carried on just fine, and suggested it be
   reverted and a different proposed patch be applied instead. Rafael
   complied.

     http://xrl.us/j65f

     More background on the matter, courtesy Wikipedia
     http://en.wikipedia.org/wiki/SIGFPE

-x allows -M on the shebang line (#38488)

   Nicholas pointed out that the following doesn't work

     #!perl -Mstrict
     print "foo\n";

   but if you run the same script with "perl -x"... it does! And wondered
   why this was the case. Yitzchak and Rafael thought that the path of
   least resistance was to make "-M" legal on the command line.

     http://xrl.us/j65g

New Core Modules

   "CPAN.pm"
       Andreas Koenig uploaded version 1.64 of "CPAN.pm"

         http://xrl.us/j65h

   "version.pm"
       John Peacock uploaded versions 0.54, 0.55 and 0.56_03 of
       "version.pm".

         Respectively:
         http://xrl.us/j65i
         http://xrl.us/j65j
         http://xrl.us/j65k

   "podlators"
       Russ Allbery released "podlators" 2.0.4

         http://xrl.us/j65m

In Brief

   Andreas Koenig noticed that "POE"'s test suite was issuing the dreaded
   "*** glibc detected *** double free or corruption" errors with
   "blead@27059". Nicholas ascribed the problem to a single missing
   tilde, which he fixed with change #27166. Andreas was pleased.

     http://xrl.us/j65n

   Enrico Sorcinelli wondered why stable is still version 5.8.7,
   according to "www.cpan.org" now that 5.8.8 has been released. As it
   turns out, it wasn't sloth on the part of the CPAN master librarian
   (ook!), but rather a policy decision to wait a certain amount of time,
   to see whether the early adopters after the public announcement
   uncover any show-stopping bugs, before declaring the release to be
   stable.

   As it turned out, at the time this summary was written, the 5.8.8
   release had been officially declared the stable version.

     http://xrl.us/j65o

   Nicholas discovered a difference between 5.8.7 and 5.8.8. In the
   latter version, the following occurs:

     $[ = 2; # warns of "Useless use of a constant in void context"

   ... but he doubted that it was going to cause problems.

     http://xrl.us/j65p

   He also realised that a grand total of zero people tested the 5.8.8
   release with 5.005 threads. Which may mean they are dead (either the
   threads or the people, take your pick).

     http://xrl.us/j65q

   When prowling around in mg.c, Nicholas came what he thought was an
   errant "break" that could never be reached, and asked if anyone could
   devise a snippet to reach it. No-one did.

     You can't get there from here
     http://xrl.us/j65r

   A smoke on windows blew up due to "PERL_IMPLICIT_SYS" choking on a
   "pTHX" that had been removed. Jan Dubois provided the voice of reason
   and got it all lined up again.

     http://xrl.us/j65t

   Going back to a thread from mid-January asking whether "SOFT_CAST"
   could be removed, Nicholas went ahead and got rid of it.

     http://xrl.us/j65v

   Robert Hicks would like to see a couple of new features in DProf: the
   ability to specify a path destination for the ".out" file, and to name
   the ".out" file based on the name of the script.

   Yes, these would be nice additions. Earn fame and glory by being the
   first person to send in a patch to do this.

     http://xrl.us/j65w

   Merijn Broeren discovered that compiling c++ code via SWIG no longer
   works with 5.8.8, spotted something that had changed somewhere between
   5.8.4 and 5.8.8, and posted a patch to straighten it all out. Applied
   as change #27203 by Rafael.

     http://xrl.us/j65x

Perl5 Bug Summary

   1543 open tickets as of 2006-02-06.

     http://xrl.us/j65y

   and 6 more as of 2006-02-13.

     http://xrl.us/j65z

     All the bugs in the world
     http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

About this summary

   This summary was written by David Landgren. Compiling this last
   fortnight has consumed most of my evenings this week. And yet, try as
   I might, I cannot seem to find the way to summarise things more
   succinctly. My apologies for the length, and congratulations if you
   have managed to read as far as here. Now to start on this week's
   summary.

   Adriano Ferreira has had to step down for a while, due to constraints
   In Real Life. I hope we'll see him in the summariser's seat again in
   the future. In the meantime, if writing summaries is your definition
   of fun, drop me a note and we'll share the work.

   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

   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:

     http://www.landgren.net/perl/

   Weekly summaries are published on http://use.perl.org/ and posted on a
   mailing list, (subscription: perl5-summary-subscribe@perl.org). 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.
-- 
"It's overkill of course, but you can never have too much overkill."


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About