This Week on perl5-porters - 11-17 May 2008

  Dominic Dunlop: Trouble is, some of it is CGI, and people whinge
  loudly when previously-clean CGI starts warning.

  Ed Avis: Ha ha ha. I think any possible programmer mistake can be
  found in a Perl CGI program somewhere.

Topics of Interest

5.8.9-to-be on Irix

  David Cantrell took the time to track down the failures (regarding
  "Sys::Syslog") with the upcoming 5.8.9 release. Versions 0.13 (bundled
  with 5.8.8) through 0.18 both pass on 5.8.8 and 5.8.9-tobe on Irix.
  0.19 and beyond fail on both versions. But 0.24 (the current version)
  does pass on platforms other than Irix.

  David provided an additional clue, in that the compiler moaned that
  something was wrong with a variable named "RETVAL" (a name that will
  strike fear into any author starting out in XS).

  Sébastien Aperghis-Tramoni, the current maintainer, wailed in despair,
  since 0.18-0.19 was a monster release, introducing support for the
  Win32 platform. After a couple of hours of serious work (and some
  minor goofing off), he offered a Subversion version for David to try.
  David announced that it worked, although the compiler was still a
  little suspicious of "RETVAL". Sébastien fixed that as well.

  And Sébastien will buy David a beer at the next London Perl Workshop.

    you know this will go down on your permanent record
    http://xrl.us/bkysu

File::Path::mkpath() incompatibility in perl-5.10

  Gisle Aas ran into grief over old-style/new-style interface for
  "File::Path". As a result, David Landgren learnt that sometimes it
  doesn't pay to be too Clever when trying to introduce new features
  while maintaining pure backwards compatibility at the same time.

  Thus, the next release of File::Path will guarantee total backwards
  compatability, and those wishing to live on the cutting edge will have
  to say so, one way or another.

    http://xrl.us/bkysw

On the almost impossibility to write correct XS modules

  Hmm. Lot of traffic next week on this one (sometimes it comes in handy
  to run late).

    http://xrl.us/bkysy

"eval "require Foo"" with binary-incompatible XS modules

  Niko Tyni was running into problems setting up Debian packages in
  order to upgrade from 5.8.8 to 5.10.0. The main reason being that
  Debian don't use a $Config{vendorarch}, which was designed to resolve
  the problem of keeping binary-incompatible XS code apart.

  There were a number of suggestions as to what could be done to fix up
  the situation, but Nicholas Clark was hesitant to endorse any of them,
  pointing out quite rightly that Debian had already survived the
  5.6-to-5.8 upgrade.

    http://xrl.us/bkys2

Method call overloading

  Following on from last week's musings, Ricardo Signes released a first
  cut at testing method call overloading to allow one's own dispatching
  techniques.

    TIMTOWTdispatchI
    http://xrl.us/bkys4

  After pondering the issue for a couple of hours, he released a second
  version with a new, improved class-based scheme. Unfortunately, in
  Ricardo's eyes, the syntax sucks. With a bit of encouragement from the
  parser, it might be possible to come up with something beautiful.

    classy work
    http://xrl.us/bkys6

Division by zero folding deferred to run-time

  Eric Brine wondered what the reasoning was behind deferring constant
  folding (such as 1/0) until run-time, when it could be caught at
  compilation time (as, in fact, it used to in 5.8).

  Nicholas Clark explained that the concept as such was an optimisation,
  and as such it should not affect the behaviour of a program. For
  instance:

    print 1/0 if $ARGV[0] > 10;

  ... could not be compiled at all on 5.8, even though in some
  circumstances the code may never be executed in the first place.

  The point in question is that such a construct might be hidden behind
  two constants subs that have different values depending on the
  platform the code is running on. In that case, the code might be
  uncompilable even though the program itself could run perfectly well.

    early decisions bad, late decisions good
    http://xrl.us/bkys8

Compiling perl (5.10.x) with gcc <= 3.2.3

  After sparring with the RT bug database, Bram began to install as many
  versions of "gcc" as he could lay his hands on, to see how they fared
  compiling perl.

  When he got as far back as version 3.2.3, the "Configure" and "make"
  succeeded, but the test suite spat out numerous "libgcc_s.so.1: cannot
  open shared object file" errors.

  Andy Dougherty suggested a riff on the "-fstack-protector" problems
  seen elsewhere this week, but that didn't do any better. Since the
  compiler in question was released five years ago, Andy suggested just
  adding a note in the INSTALL file.

  H.Merijn Brand committed change #33841 to note the fact in
  README.linux, but wasn't really happy with the idea, since gcc runs on
  other platforms as well. But that's ok, because he will have to revert
  the change, since Bram figured out a simple recipe that allows 3.2.3
  to work.

    http://xrl.us/bkyta

Empty pattern and /o

  Bram lifted an old bug out of obscurity, concerning the empty pattern
  ("//") and the "/o" modifier, the point in question being the
  interactions observed when "use re 'eval'" comes into play.

  Yves Orton grumbled that all these things were complicated to begin
  with, so one can grasp the potential for mischief when they interact
  in a single expression.

  Abigail thought it would be nice to downplay the importance of "/o" in
  the documentation, since it invariably led people to find out about
  it, and then proceed to use it incorrectly.

  Similarly, Abigail thought that "//" (match again with the same
  pattern that was used previously) doesn't have any use in the real
  world; most canonical examples being somewhat contrived. What does
  happen with annoying regularity is that people use "/$var/", and $var
  turns out to be empty, thus triggering an unexpected action at a
  distance.

  Yves Orton wanted to make "/o" a true no-op, and make the magic empty
  pattern behaviour only kick in if the pattern was well and truly a
  "//" as parsed. And it probably comes as no surprise that Yves had a
  couple of perfectly reasonable use cases where "//" patterns are very
  useful:

    if (m/$some_big_nasty_pattern/ and $1 eq $something) {
      s///;
    }

  and

    if (m/$pat1/ or m/$pat2/ or m/$pat3/) {
      s///;
    }

  Yves was careful to point out that he only used empty pattern magic
  with the substitution operator. For the match operator, he thought the
  empty pattern should warn all the time.

  And "/o" can't be no-op'ed just yet, since it still adds a tiny
  smidgen of performance, even in 5.10. So first of all Yves needs to
  fix the underlying problems that make it useful in the first place, at
  which point it could be deprecated.

    http://xrl.us/bkytc

TODO of the week

Remove duplication of test setup

  Schwern notes that there's duplication of code - lots and lots of
  tests have some variation on the big block of $Is_Foo checks. We can
  safely put this into a file, change it to build an %Is hash and
  require it. Maybe just put it into test.pl. Throw in the handy
  tainting subroutines.

Patches of Interest

Add Some Links to External (WWW) Resources to the Perldocs

  Shlomi Fish responded to the criticism of his patch (it should not be
  accepted since it has a higher maintenance burden due to linkrot),
  arguing that a quality product requires maintenance, and a high
  quality product requires more maintenance.

  Quoting Nicholas Clark:

  There is a fundamental conflict in the Perl documentation as is.
  People are tugging it in both ways - it's trying both to be a
  reference manual (terse, to the point), and an introduction/tutorial.

  It can't be both. It certainly can't be all things to all people.
  [...]

  We have to assume some level of intelligence on the part of the
  readership. If they don't know a concept, they will be smart enough to
  research it for themselves.

    rejected
    http://xrl.us/bkyte

Compress/Raw/Zlib/Zlib.xs // comment fix

  Andy Dougherty replaced some C++ comments with good old-fashioned C
  comments. Paul Marquess thanked him and updated his own repository.
  H.Merijn Brand applied the change, and idly wondered whether it will
  be possible with git to reject a patch that contains such base sins.

    /* TIOOWTDI */
    http://xrl.us/bkytg

"h2ph": recognise the quote mark delimiter on #include directives

  Niko Tyni saw that "h2ph" had trouble when system headers include file
  names in quotes rather than angle brackets. He wrote some code to fix
  up the problem and this allowed a number of regexp experts to show off
  their skills. In the process, the patch was thoroughly reviewed and
  made it in.

    #include "peer-review.h"
    http://xrl.us/bkyti

New and old bugs from RT

uc/lc/ucfirst/lcfirst fail on typeglobs (#39019)

  Bram tried to sneak this one past as being resolved, since it
  certainly looked like it. Nicholas Clark disagreed, explaining that
  there was a problem with it, although likely one that only he could
  fix.

  So Bram asked Nicholas to explain more clearly what the problem was,
  or rather, given what input produces incorrect output?

    an open question
    http://xrl.us/bkytk

"bleadperl -Dm -e1" segfaults on win32 (#39806)

  Bram asked for Win32 porters (which these days is Strawberry, right?),
  and/or Linux+threads porters to see if this problem persists.

    call me in the morning
    http://xrl.us/bkytn

glob() should do taint checking (#39821)

  Bram asked for a resolution on this issue. Andy Dougherty replied that
  functions don't fail on tainted args unless they have an impact on the
  outside world. "glob" pulls information in from the outside world, so
  we don't care about what we ask of it. On the other hand, what "glob"
  returns is viewed with the utmost suspicion.

    live free or die
    http://xrl.us/bkytp

Bug in "File::Find" on Windows when targetdir is bare drive letter and "no_chdir = 1" (#41555)

  Bram implemented David Landgren's suggestion (or something resembling
  it) to create a regression test for the code to deal with a directory
  search starting with a volume name and a relative directory (that is,
  something like "D:right\here".

  Rafael thought the patch looked sane enough to apply; the smokers will
  soon find out if it causes severe burns.

    http://xrl.us/bkytr

"NDBM_File" fails to build (#50180)

  Andy Dougherty created a pair of patches to teach "NDBM_File" how to
  build itself, and he believed that the patches were safe to apply to
  all perl versions. H.Merijn Brand applied the patch to blead.

    http://xrl.us/bkytt

Deparse interpolation in regex literal (#51848)

  Ambrus Zsbán had filed a report about "B::Deparse" failing to
  restitute "/${x}y/" correctly. Rafael Garcia-Suarez commented this
  week, saying that it failed because the optree was missing an
  "op_concat", and this threw everything else off. Rafael proposed a
  first fix, with ugly cutting and pasting, but then sat down like a
  good boy and did a proper refactoring and wrote some regression tests
  as well (change #33851).

  This did lead him to wonder, all the same, *why* the opcode was no
  longer there. Yves Orton blamed Dave Mitchell. Dave replied saying
  that yes, it was his fault. The change was a result of some initial
  work some time ago to make "(??{...})" work better. The idea is to had
  the regexp compiler a list of tokens that comprise the code block,
  instead of a single blob of uselessness.

    http://xrl.us/bkytv

op/pwent.t should use the DirectoryService on OS X (#53500)

  Tom Wyant read about this problem in the perl5-porters summary, and
  was inspired enough to write a patch to fix the issue. Yay him! Rafael
  applied the patch to blead, hoping that no Leopards, Tigers or other
  such beasts would be hurt in the process.

    w00t
    http://xrl.us/bkytx

"elseif" should be "elsif" (#53808)

  Ben Aveling got mixed up between Perl and Ruby or PHP or ASP or TCL or
  not Javascript and wrote "elseif" instead of "elsif". Instead of
  receiving a boring syntax error, Ben was slightly puzzled by the fact
  that he received an explicit recommendation to change "elseif" to
  "elsif". His reasoning was that if the lexer is so smart to
  second-guess the programmer, why not just emit the elsif token and be
  done with it.

  Abigail pointed out that doing this would break any code that defined
  a sub named "elseif" (although it could be argued that any programmer
  doing so should be taken out the back and beaten severely about the
  head with a blunt object). David Nicol gave "Macrame" a plug, showing
  how one could write a macro for this situation. Yitzchak
  Scott-Thoennes pointed out that a language change of this nature would
  break syntax-highlighters.

    we'll leave it at that
    http://xrl.us/bkytz

Bug in "Time::HiRes" 5.11 (#53962)

  Dmitry Karasik thought he found a bug in "Time::HiRes" on 5.10 and
  blead (bug #53962) and thought the underlying code looked pretty
  horrible. Dominic Dunlop replied that many different systems handle
  high resolution time measurements in many weird and wonderful ways.

  Given this extra bit of information, Dmitry was able to refine his
  patch. But the patch didn't solve Reini Urban's ongoing "Time::HiRes"
  failures on Cygwin.

    adapt to reality
    http://xrl.us/bkyt3

"pod2man" nroff =head2 with two C<> blocks (#53974)

  Kevin Ryde looked at a POD heading with two C directives and noticed
  that the bold was switched off after the first one. He was brave
  enough to delve into Pod/Man.pm and produce a patch that fixed things
  up.

  Unfortunately he wasn't entirely certain that this wouldn't cause
  problems elsewhere, and the copious tests available did not help
  clarify the issue.

    http://xrl.us/bkyt5

Respawning processes with negative return values on Win32. (#54028)

  Alistair showed how a very short C++ program whose main claim to fame
  was to return -1 as a status code to the operating system could be
  called twice, even though the Perl code contains only a single
  "system" call. He delved into the code in win32.c and found some
  suspicious code that appears to interact with $!.

    skeletons in the closet
    http://xrl.us/bkyt7

Misparsing of sort comparison subroutine intention (#54040)

  Ken Williams tripped up over the difference between the use of a
  function used to compare pairs in a sort and sorting the results of
  what a function returns. David Nicol was hard pressed to classify the
  problem as a bug from either a documentation or implementation
  standpoint.

  Aristotle Pagaltzis admitted to having been bitten by the bug before,
  Abigail suggested using the secret "+" operator to disambiguate the
  meaning. David finished with a revised wording for the documentation,
  and there the thread ended.

    care is required when sorting the list returned from a function
    http://xrl.us/bkyt9

"usethread=no" Configure compiler test file try.c is missing. (#54042)

  Reini Urban saw that deactivating threads with MAD triggered an
  internal Configure script bug, and so he reported it. Alas, no porter
  with sufficient Configure-fu responded.

    please report this
    http://xrl.us/bkyub

"perl -wle '%::=();//'" crash (#54044)

  Reini also recorded the fact that resetting the main stash and then
  running an empty match will cause perl to dump core. He wasn't sure
  which way out was the best, but thought that he could do better than
  just segfaulting.

  Yves Orton recalled reading about someone who built up some Markov
  chains using real Perl code to produce slightly bogus code to try and
  trigger segfaults. Nicholas Clark pointed Yves to the perl5-porters
  post, a mere five minutes later.

    match my stash
    http://xrl.us/bkyud

semi-panic: attempt to dup freed string (#54114)

  Nicholas Clark suspects this bug is yet another case of the stack not
  being reference counted.

    wontfix
    http://xrl.us/bkyuf

Need more "-fstack-protector" (#54120)

  Andy Dougherty sent in a patch to fix up undefined symbols from
  occurring when "-fstack-protector" is used. The correction was to use
  compiler flags to ensure the use of the switch was propagated out to
  XS modules.

  Nicholas Clark pointed out a flaw in the plan that forced Andy back to
  the drawing board.

    http://xrl.us/bkyuh

"IO::Seekable" + "POSIX" == constant subroutines redefined (#54186)

  Niko Tyni showed how the incestuous relation between (what in fact
  actually turned out to be) "Fcntl" and "POSIX" would generate lots of
  messy warnings.

  Nicholas Clark fixed things up so that "POSIX" now imports what it
  needs from "Fcntl" instead of reinventing wheels badly. In the process
  of cleaning things up, he realised that there was scope for doing the
  same kind of decrufting elsewhere in the codebase, which should worth
  another TODO.

    http://xrl.us/bkyuj

"readlink()" returns result along with garbage (#54198)

  Denis Melnikov noticed that using "readlink" in the Linux /proc
  filesystem can lead to some strange results. After some investigation
  it was decided that the observed behaviour was quite appropriate.

    although not really documented
    http://xrl.us/bkyum

segfault in "perl_clone()", probably due to running out of memory (#54224)

  This week, Niko Tyni also uncovered another way to generate a
  segfault, but admitted that it wasn't a very important issue.

    but a core dump is a core dump
    http://xrl.us/bkyuo

Panic opt close in regex "/(?:(o){2})?/" (#54228)

  Niko also rediscovered the bug involving a capture group and a curly
  specifier in a regexp. Apart from the fact that no-one can provide a
  definition of what such an expression should do, it certainly
  shouldn't dump core.

  David Landgren grovelled through his memory and old summaries and
  identified bug #39233 as an earlier instance of the same underlying
  problem. Yves Orton assigned himself the bug so as not to forget about
  it.

    http://xrl.us/bkyuq

Perl5 Bug Summary

  Bram's been busy again this week.

    279 + 1383 = 1662 (+8 -44)
    http://xrl.us/bkyus
    http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

New Core Modules

  "threads::shared" 1.21
      Jerry D. Hedden shares some more threads goodness.

        http://xrl.us/bkyuu

  "Thread::Queue" 2.08
      and this allowed him to push a new release of this one, too.

        http://xrl.us/bkyuw

  "IO::Compress::*" 2.011
      Following on from the C++ comment, Paul Marquess release 2.011,
      which also fixed a slew of problems reported on RT.

        http://xrl.us/bkyuy

In Brief

  (My damned wireless network at home kept flaking out this week,
  causing my ssh sessions to die. At some point during an evening's
  summarising, I noticed that the file was truncated right about here.
  I've restored the rest of it from a backup, but some items I wrote
  between then and now were wiped out. Sorry about that. Since what goes
  here is usually short, and resolved, it's not so bad).

  Rafael Garcia-Suarez took chromatic's patch to add ..., !!!, and ???
  operators and applied it.

    I want a blah blah blah operator
    http://xrl.us/bkyu2

  Reini Urban pleaded for the change that fixes the crash when
  localizing a symtab entry (bug #52740) to be backported to 5.10.x.

    one for Dave
    http://xrl.us/bkyu4

  Yves Orton announced that he was out of action but back in the saddle
  again a bit. Marvellous. Now he'll go and add a slew of regexp verbs,
  and I still haven't digested the first lot.

    onya!
    http://xrl.us/bkyu6

  Bram says bleadperl crash in "Perl_pp_entersub()" (#40493) is fixed.

    http://xrl.us/bkyu8

  Bram looked at a perl -d bug on Mandriva Cooker with 5.8.8 (bug
  #39758) and said it looked pretty good (although the jury was still
  out on 5.8.9-tobe)

    so, the smoke finished?
    http://xrl.us/bkyva

  He also delivered some promised TODO tests to record the fact that
  "print Does::Not::Exist, ''" does, when it shouldn't (bug #53806).

    http://xrl.us/bkyvc

  He also repackaged another suggestion from a previous week concerning
  the AIX Hints file (libm package).

    awaiting comments
    http://xrl.us/bkyve

  Bram wrote a documentation patch to clarify the use of reverse in
  scalar context. Yves applied it. Which allowed Bram to close bug
  #39187.

    http://xrl.us/bkyvg

  Edward Peschko wanted to know if a particular debugger that promised
  seamless XS debugging ever made it out into the wild.

    http://xrl.us/bkyvi

  Matt Kraai made some edits in the FAQ to link "perlfunc" to the
  correct section of "perlop".

    q//, qq//, qx//, and qw//
    http://xrl.us/bkyvk

Last week's summary

  Hmm, seems it never made it to the list. It did turn up on
  summary-only mailing list if you need to hunt down a copy. And yes,
  the archive on dev.perl.org is not being updated. I'll get to that...
  eventually.

About this summary

  This summary was written by David Landgren.

  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, please consider contributing to the
  Perl Foundation or attending a YAPC to help support the development of
  Perl.

--
stubborn tiny lights vs. clustering darkness forever ok?

Reply via email to