This Week on perl5-porters - 16-22 January 2006

"Class::Autouse" test fails on "blead"

  "Class::Autouse" allows you to defer the loading of a class until you
  actually get around to calling a method belonging to it, and the test
  suite checks what happens when the class to be "use"d cannot be
  compiled. The test that used to work, worked no longer, and Adam
  Kennedy, the author, was wondering what changes had occurred in
  "bleadperl" that could explain the problem.

  Nicholas tracked it down to change #25599, a fix by Rafael
  Garcia-Suarez for the bug that caused "CORE::require" to ignore the
  "CORE::". (That is, if "require" was overridden, there was no way to
  specify the underlying "require"). Rafael fixed the fix in fix #26881.

    Class::Autouse
    http://search.cpan.org/dist/Class-Autouse/

    Squash a bug, get a new one free
    http://xrl.us/jqvn

Cached %ENV on cygwin

  Tim Bunce dropped in with a bug that cropped up on the "dbi-dev"
  mailing list, someone having trouble getting "DBD::Oracle" and Cygwin
  playing nicely together, and offered his theory about what was going
  wrong. Andy Hassall correlated that with a message on a Cygwin
  development list and confirmed Tim's theory.

  Yitzchak Scott-Thoennes didn't have time to look at the code, but
  offered some tips on how to restructure the test suite to work around
  the limitation (which is, to quote Tim, that manipulating %ENV doesn't
  alter the process's own environment variables until a subprocess is
  spawned).

    Too clever by half
    http://xrl.us/jqvo

Dead part of constant expression is nonconstant

  Gisle Aas reported that the Sun C compiler spits out endless "dead
  part of constant expression is nonconstant" warnings when the macro
  "Newx" is encountered in the source, and wondered what to do about it.
  It is in fact a compiler bug. Alan Burlison had filed a bug report
  with the Sun group and had updated perlsolaris.pod with the workaround
  (adding a switch to ignore the warning in question, pending resolution
  of the bug in the compiler).

  Gisle evidently thought that this was a suboptimal hack, and rewrote
  part of the macros guts in a new way, replacing a ternary by a series
  of logical ands, thus making the warning disappear altogether. Alan
  was impressed.

    Gisle in action
    http://xrl.us/jqvp

"until ()" is not like "while ()"

  John Nurick wondered in bug #38254 why "while ()" behaves like "while
  (1)", but "until ()" won't compile. He pointed out that making "until
  ()" equivalent to "until (1)" would be quite useless (as useless as
  "while (0)"), but a good case could be made for making it equivalent
  to "until (0)".

  Yizchak showed that "until ( () )" worked as expected (if slightly
  non-obvious), but otherwise no lexer wizards chose to come up with a
  two-line patch to make Perl DWIM.

    A call to orthogonality
    http://xrl.us/jqvq

Another "defined %foo::" bugfix

  Rafael found another problem pertaining to "defined %foo::" by smoking
  Inline. The following no longer worked:

    package test;
sub import { print defined %some::random::stash:: ? "not ok" : "ok", "\n" }
    1;

  And fixed it up with a short, sharp patch (#26867).

    Always test scary modules before a release
    http://xrl.us/jqvr

Documentation discrepancy over "-DPERL_EMERGENCY_SBRK"

  Stas Bekman noted that it is possible to set aside an emergency pool
  of memory so that perl could do something useful after "die"ing, and
  perlvar.pod explains how to set it up. On the other hand, the INSTALL
  file fails to make any mention of it and wondered what was the best
  thing to do about it. Rafael committed change #26878 to clarify the
  issue.

    Save some for later
    http://xrl.us/jqvs

Impossible seeming bug

  Hal Morris tripped if the "if(0)/elsif(0==undef)" bug (the reported
  line number being that of the "if", not the "elsif". The is because of
  the way the internal representation of the program discards the
  information concerning the line number of the "elsif". When a problem
  occurs, the line number of the "if" is all that remains, so that is
  what is used in the warning message.

  Paul Johnson wished it was fixed, because it would make
  "Devel::Cover"'s branch and condition coverage easier to understand.
  David Landgren pointed to the previous thread on the matter.

    This can't be right
    http://xrl.us/jqvt

    Nor was it back then
    http://xrl.us/jqvu

"Pod::Simple::Search" and non-case-preserving filesystems

  Allison Randal cast her attention to a late-December post from Craig
  Berry, who was having trouble with "Pod::Simple::Search" on VMS and
  had supplied a patch to resolve the problems he had encountered
  (relating to the fact that FOO and foo can refer to the same file).

  Allison gave details of three minor problems she had encountered with
  the patch, proposed fixes and asked if Craig could verify the
  correctness on VMS, which would allow her to release 3.04.

  Craig took Allison's amendments for a spin, ironed out a few kinks and
  gave it the thumbs up.

    Shiny cross-platform goodness
    http://xrl.us/jqvv

Avoiding realloc

  Nicholas Clark had a look at way perl allocates memory for scalars. Up
  until now the exact size has always been requested, and the allocated
  size is recorded. This helps avoid unnecessary trips to the heap when
  a string shrinks and then grows yet stays within the size of the
  original allocation.

  On the assumption that "malloc" implementations silently round up
  anyway, because it simplifies the internal bookkeeping, it makes sense
  to round up the requested size silently on perl's side anyway, because
  then scalars that creep a little bit past the initial requested size
  might still remain within the initial requested size, thereby avoiding
  a costly "realloc".

  Nicholas then set about trying to determine the exact number of bytes
  that are in fact allocated for all small allocation values (where
  small means between 1 and 256). It turns out that a brute force "round
  up to nearest multiple of 4 on a 32-bit CPU" rule wasn't particularly
  effective. "malloc" sometimes allocates much more, especially on
  FreeBSD. Nicholas wanted to know whether it would be worth the effort
  to probe for these sizes at "Configure" time, build a lookup table,
  and tweak the already monstrous "PERL_STRLEN_ROUNDUP" macro to use it
  for short allocation sizes.

  Nicholas simply wanted to minimise the number of calls made to
  "sv_grow", without requiring any extra code or tests elsewhere in the
  interpreter. Gisle was unconvinced, reasoning that it takes memory
  away from "malloc" that "malloc" may be able to deploy more
  effectively elsewhere at some further point in time.

    Use a lookup table to save memory
    http://xrl.us/jqvw

*au revoir*, and LVALUE matches

  Dave Mitchell wrote to say that he was going off-line for a month
  (visiting India), without a computer, and thus the longest time with
  out access to one since 1979. Let's hope he reads the summaries when
  he gets back to catch up. Nicholas noted that he had to revert one of
  Dave's recent changes (#26410, which fixes infinite loops in the
  regexp engine on a tainted scalar) as it caused an unexpected failure
  to occur elsewhere. Dave still found time to analyse the problem
  carefully, and judged the behaviour to be ideally a new feature for
  5.10.

  Abigail didn't like the consequences that an unnecessary "/g" on a
  match could now be sufficient grounds for a program to die. All this
  reminded Rafael about two changes he applied a couple of years ago,
  noting the similarities between the problems raised then and now. Rick
  Delaney proposed a patch that fixed the test, but admitted to not
  understanding all the ramifications, having merely lifted code from
  elsewhere in the interpreter that deals with the same sort of issues.

  Dave Mitchell, no doubt in a Wifi bubble at the local airport, said
  that his patch was indeed wrong, and should be backed out from "blead"
  as well. And pointed to very old, deep magic as probably being the
  source of the problem, such as the hack that enabled "local $a[0] =
  $a[0]". The tests have now been marked TODO, so that someone can think
  about them again in time for 5.9.4.

    No fix is better than a bad fix
    http://xrl.us/jqvx

"bleadperl" regression testing

  Steve Peters has been a busy man, testing many, many modules against
  "blead" and gave a clean bill of health to nearly 4 dozen modules. 8
  passed with warnings and several big and/or scary ones failed ("TT2",
  "Kwiki", "DBI", "Devel::Hints" and "HTML::Mason". And if that wasn't
  enough, he also cooked up some patches and sent them off to the
  respective module authors.

  Gisle noted a problem with "Perl_newSVrv" as a result, which Rafael
  fixed up with change #26885.

    Test... everything
    http://xrl.us/jqvy

Asserting that non-"NULL" parameters are passed to "av_*"

  A while ago, in change #26513, Gisle added assertions to ensure that
  the "av_*()" functions are indeed given "av"s as arguments. Nicholas
  noted that "Template::Toolkit" fails the assertion, managing to pass a
  "NULL" to "av_fetch" at one point.

  Gisle wanted to know whether Nicholas wanted "NULL"s to be allowed
  again, pointing out that in an ideal world, "TT" should not have
  called "av_fetch" the way it did.

  Nicholas's point of view was that the assertion changes the API
  behaviour in a non-trivial (albeit better) way, and thus not really
  allowable for the maintenance branch, and said that it was Rafael's
  call as to whether he wanted it in "blead". Rafael decided to keep it.

    Theory meets reality
    http://xrl.us/jqvz

Compiling "blead" on VMS

  John E. Malmberg wrote in with a status report for "blead" on VMS,
  saying that 6 tests were failing, and gave a rundown on what was
  happening, or what he was going to do. Steve Peters and Craig Berry
  either pointed to or wrote a couple of changes that should have
  resolved the issues John was encountering.

  Marcus Holland-Moritz tried to reproduce the failures on a testdrive
  machine without luck, but did manage to isolate the changes that
  triggered the errors, and warned Nicholas that if he had integrated
  those changes into "maint" then the errors would pop up there as well.

    6 test failures
    http://xrl.us/jqv2

  After checking out a copy of "[EMAIL PROTECTED]" (meaning the source tree
  for perl as of change #26913), John found that only one test,
  lib/ExtUtils/t/Manifest, was failing. Craig Berry was at a loss as to
  how to deal with the failure. VMS has a much richer set of privileges
  than Unix. If the test is run from a process with high privileges, it
  succeeds. If run with lower privileges, it fails, as a result of what
  is, deep down, a rather sensible security decision in the design of
  VMS (that permissions do not necessarily follow a copied file). Craig
  pondered how to fix it. chromatic pragmatically suggested that a skip
  was in order. Craig amended the skip to nail down the semantics of the
  test more precisely.

    5 down, 1 to go
    http://xrl.us/jqv3

Devel-PPPort-3.07

  Steve Hay noted that the current version of "Devel::PPPort" is missing
  both "SvPV_nolen_const" and "SvPV_nomg_const" and wondered what the
  reason was. Marcus Holland-Moritz pleaded not guilty, having missed
  the information in the 1500 messages remaining to be read in his "p5p"
  folder.

  Marcus also provided the magic POD recipe required for documentation,
  which would have allowed the information to be extracted
  automatically, in which case he would have noticed them and included
  them in the release.

  Reflecting on what Marcus said, Jim Cromie noticed some discrepancies
  between embed.fnc and pad.c and wondered what the reason was. Marcus
  pointed out that that is what happens when people document macros or
  functions that are not strictly part of the public API. So more of a
  feature than a bug.

    Working according to spec
    http://xrl.us/jqv4

Reducing calls to "getprotoby{name,number}" by "IO::Socket::INET"

  Gisle found that the seemingly innocuous program

    use IO::Socket::INET;
    my $a = IO::Socket::INET->new("www.perl.org:80");
    my $b = IO::Socket::INET->new("www.perl.com:80");

  ... opened /etc/protocols on his linux system 4 times, which he
  thought was rather wasteful, and proposed a patch to cache the results
  and also work correctly on systems with borked /etc/protocols (which
  in itself is cause for a number of bug reports filed against LWP).
  Graham Barr (author and maintainer of IO::Socket::INET) liked the
  idea, and folded the change into his own repository for an upcoming
  release.

    IO, IO, it's off to less work we go
    http://xrl.us/jqv5

  Roland Illig asked why "perlcc" cannot compile a program he wrote in
  bug report #38279. Given Dave Mitchell's reply to a similar bug last
  week, it's safe to assume that "perlcc" is *never* going to compile
  that program.

    It doesn't work any more
    http://xrl.us/jqv6

    And it probably won't ever, either
    http://xrl.us/jqv7

"flock" does not work properly on (old) Solaris systems

  "Sign Writing" (what were his/her parents thinking?) filed bug #38282
  wherein we learnt that old Solaris versions have trouble "flock"ing.
  Abe Timmerman provided a snippet to help Sign research the issue.
  After investigating a bit more, Sign found that a similar program
  written in Python worked correctly.

  With a bit more help from Abe, Sign was able to solve the problem, who
  discovered "that perl drops the lock when duping the filehandle, but
  it appears to be related to duping it to something like STDOUT or
  STDERR. Perl tries to preserve these if the operation fails, but if
  it's explicitly closed before the dup, it works."

    flocking hell
    http://xrl.us/jqv8

Enabling cumulative profiling with "-Dusesitecustomize"

  Nicholas Clark was annoyed the way that "gcc"'s profiling mechanism
  consists of overwriting the contents of "$0.gmon" with the information
  gathered during the profiling run. This is exceptionally annoying when
  you are trying to generate cumulative data from multiple runs.

  After his first work-around attempt with a shell wrapper was foiled by
  too-clever code that acquired the necessary information directly from
  $^X, he devised a crafty solution involving "-Dusesitecustomize".

  After getting this to work, he benchmarked SpamAssassin's test suite
  and found that the most expensive routine was (*surprise!*)
  <S_regmatch>.

  Gisle Aas astutely observed that it would be more useful to benchmark
  SA doing real work, rather than the test suite, since, in theory, the
  suite is mainly testing fiddly edge cases.

    Now all we need is for someone to analys the results
    http://xrl.us/jqv9

Cross-compiling Perl

  John Clark wrote to relate his difficulties in cross-compiling perl.
  Specifically, going from "i686"/"gnu libc" to "i586"/"uClibc". Nothing
  too radical, like going from an IBM rs6000 to a PDP-11, but
  nevertheless John was surprising by the number of little niggly
  problems he encountered.e

  This prompted Philippe Ney to recall that he succeeded in
  cross-compiling for "i386-uClibc", but only with static linking, and
  was hoping that someone had managed to succeed in making dynamic
  linking work.

  No-one, apparently, had.

    Cross-eyed and painless
    http://xrl.us/jqwa

5.8.8 RC1

  The Release Candidate 1 for Perl 5.8.8 has been published by Nicholas.
  But then, you already knew that.

  H.Merijn Brand published his DOR (defined or) patch that syncs with
  the codebase as it currently stands.

  Reports of compile and test successes started to roll in.

    Take it for a spin
    http://xrl.us/jqwb

Allowing "chr(65535)" in regexps

  Marc Lehmann filed bug #38293, saying that using "chr(65535)" in a
  regular expression results in the warning:

    Malformed UTF-8 character (character 0xffff) in regexp compilation

  ... and yet "chr(65534)" works just fine. Both characters are
  guaranteed to be illegal characters that can be used for internal
  processing (sort of like an ultra-hyper-uber "\0" for end-of-string
  markers I suppose). Gisle made a good argument for why it would be
  handy for this to work in Perl.

  Sadahiro Tomoyuki pointed out that all you have to do is "no warnings
  'utf8';" to suppress the message. Tels traced down the error to a
  section of code in "Perl_uvuni_to_utf8_flags" that was doing a rather
  long-winded test, making Tels wonder whether the test was botching its
  conclusion.

  Marc, Tomoyuki and Yitzchak then started discussing Unicode arcana
  which started to make my eyes glaze over, and as this is the last item
  of the summary, you'll just have to click on the link to find out out
  more.

    The $65535 question
    http://xrl.us/jqwc

New Core Modules

  Podlators 2.0.1
      Russ Allbery reported that the problem concerning parser objects
      that cannot be reused has been resolved, along with a few other
      minor issues.

        http://xrl.us/jqwd
        http://search.cpan.org/dist/podlators/

  Archive-Tar-1.28
      Jos I. Boumans uploaded "Archive-Tar-1.28". Paul Marquess pointed
      out that the latest version of "Compress::Zlib" has some nice
      features that will make "Archive::Tar"'s life easier in the
      future.

        http://xrl.us/jqwe
        http://search.cpan.org/dist/Archive-Tar/

Perl5 Bug Summary

  1526 open tickets.

    http://xrl.us/jqwf
    http://rt.perl.org/rt3/NoAuth/perl5/Overview.html

In Brief

  Konrad Eisele noted that while it is not possible to tie a subroutine
  reference, he nevertheless proposed a patch for "Perl_mod()", which
  would at least make it produce a sensible error message.

    http://xrl.us/jqwg

  Seung-Ho Han asked where to find information on functions like
  "svref_2object" and "rv2sv", and was directed to look at perlguts and
  the "perldoc B" command.

    http://xrl.us/jqwh

  Steve Hay discovered that "maint"'s perlapi refers to 5.9.3, instead
  of 5.8.8 in relation to documentation on "Newx"/"Newxc"/"Newxz".

    http://xrl.us/jqwi

  Steve also noted that "New()" and its ilk have been replaced by the
  "Newx()" family, due to a redesign in how memory leaks are trapped,
  and wondered whether "NEWSV()" should be replaced by "newSV()"
  throughout the core (whilst retaining the "NEWSV()" definition for XS
  compatibility). Gisle agreed, and thus is was done, as change #26901.

    http://xrl.us/jqwj

  Dave Mitchell noticed that Copying contains version 1 of the GPL (the
  GNU General Public Licence that governs the use of Perl) but that
  pod/perlgpl.pod contains version 2. He thought that the same version
  should be used in both places, but didn't know whether version 1 or 2
  should be used. And that version 3 was just around the corner...

    http://xrl.us/jqwk

  Vadim Konovalov thought that the fact that statically linking of Perl
  extensions on Win32 was made functional was worthy of being mentioned
  in the release notes for the upcoming "maint" and "blead" releases.

    http://xrl.us/jqwm

  Nicholas Clark found that "SOFT_CAST" in perl.h appeared to date back
  from around 5.003 and wondered if these days it was just excess
  baggage. Andy Dougherty concurred, and so "SOFT_CAST" was cast off.

    http://xrl.us/jqwn

About this summary

  This summary was written by David Landgren. As they say, better late
  than never.

  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