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
  "[EMAIL PROTECTED]". 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: [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.
--
"It's overkill of course, but you can never have too much overkill."

Reply via email to