This Fortnight on perl5-porters - 3-16 April 2006 The porters concentrate on the Coverity reports, cleaning up a collection of crazy, curious and crufty code constructs.
Topics of Interest Even more recursion removed from the regex engine Dave Mitchell continued his quest to improve the regexp engine. In this batch of changes, he used slab allocations to deal with the hassle of saving the context required for dealing with backtracking. With a couple of other improvements, the performance is now back to where it was when the engine used a recursive approach, so the efficiency is the same now as it was then. More importantly, he also removed the final recursion path triggered by "(??(..code..})" assertions. This opens the way to a number of other improvements. The only downside is that at the moment it looks like the changes are so extensive that it is unlikely to be backported to "maint". Watch this space http://xrl.us/kw8f Andy Lester later scavenged a bit of unused code in regexec.c, which made Dave realise that the code was only unused because he had accidentally deleted some other code that referred to it. So he reverted Andy's change and restored the code he had removed. Whatever gets you there http://xrl.us/kw8g Empty keys in %Config Brendan O'Dea forwarded a wacky bug from Debian, in that %Config has some place-holders for paths to programs like tail(1) or sendmail(1), but Configure never probes for them, so they are left empty. One would have to run something like Configure -Dtail=/usr/local/bin/tail and then write code like my $tail = $Config{tail} || '/usr/bin/tail'; in order to make any use of it, and thus wanted to know what the idea was. Despite his best "Configure"-fu, H.Merijn Brand was at a loss to explain why these (but not all) values were empty, because it was set up to in fact probe for them. Andy Dougherty provided the missing pieces of the puzzle, which was sufficient for H.Merijn to figure out what was happening, and how to fix it. H.Merijn gets some more -fu http://xrl.us/kw8h Some time prior to the above thread, H.Merijn made a plea to get people to test "Configure", as it has received a good working over recently, and some things may have been broken in the process. Test this http://xrl.us/kw8i Coverity defect scan of Perl A while back, Coverity announced that it had applied its source code analysis tool to a number of high-profile open source projects. At the outset, Perl had a very favourable ratio of defects to lines of source code. Nicholas Clark noted with dismay that a number of other projects (PHP, PostgreSQL and Samba) had since addressed every single reported defect, thereby pushing Perl to the back of the pack. Benjamin Holzman and Andy Dougherty went looking to see what they could do. "Issue" is probably more accurate than "defect" http://xrl.us/kw8j The current state of play http://scan.coverity.com/ Acting upon the Coverity findings Andy Lester started working through the warnings produced by the Coverity source code analysis tool. The first thing he dealt with was some dubious "#ifdef"s dealing with "SOCKS5"-specific code, Clean socks http://xrl.us/kw8k and tightened up some code in pp.c that should be clearer to both humans and source code analysis tools, Everyone's a winner http://xrl.us/kw8m and tidied up some code in pp.c that, while not officially *wrong*, was certainly of dubious merit. Barely legal http://xrl.us/kw8n Jarkko fixed locale.c, http://xrl.us/kw8o and since he enjoyed it so much, he did it again, http://xrl.us/kw8p and then examined another issue that arose when you set "$/ = \0", and documented that as well, One less undocumented feature http://xrl.us/kw8q and continued by adding "NULL" guards to calls to "IoIFP" in pp_sys.c, http://xrl.us/kw8r not to mention a similar problem concerning formats, also in pp_sys.c, Little wonder this was never encountered http://xrl.us/kw8s and added an "assert" in perlio.c, which should be sufficient for Coverity to understand what is going on. Alas, Nicholas noted that it doesn't appear to believe perl's special home-grown "assert". So Jarkko added a comment that should be understandable by a human (and tough beans for Coverity), http://xrl.us/kw8t Andy then guarded a pointer dereference, by ensuring that it points to something useful (that is, something other than "NULL") in regcomp.c, http://xrl.us/kw8u attempted to indicate that "listsv" is never "NULL", elsewhere in the same file, http://xrl.us/kw8v but amended it following a suggestion by Nicholas. http://xrl.us/kw8w In regexec.c, Jarkko moved a "NULL" check in the hope that it would allow Coverity to make better sense of the code, http://xrl.us/kw8x but that appeared insufficient, and so he hoisted the check even further up in the routine, blowing away Andy's delicate "const"ing work in the process, Real Men don't use const http://xrl.us/kw8y and added another "NULL" check. Dave Mitchell thought that this was slightly pointless, for if the variable in question really was "NULL" at that time, then the pattern was in such trouble that stopping to check whether the variable contains "NULL" is just rearranging the deck-chairs. http://xrl.us/kw8z Jarkko then plugged up a leaking file handle in ext/XS/Typemap/Typemap.xs. Unfortunately, the obvious one line fix was also incredibly wrong, causing bad things to happen, which left Jarkko and Nicholas scratching their heads. Tim Jenness recalled that there was a discussion on this issue a few years back, and the gist of the problem is that when a handle is created in XS, the core takes over and claims the responsibility of of closing it for you. A mechanism to prevent this delegation from occurring is available for XS authors who need it, but it is not ideal in the general case, as it prevents useful DWIMmery from taking place, such as (surprise!) closing the file. Too clever, or not clever enough http://xrl.us/kw82 Jarkko carried on and clarified a pointer aliasing issue, by removing a temporary alias hanging around in perlio.c, http://xrl.us/kw83 and another temporary in the same file that caused Coverity to think there was a resource leak. http://xrl.us/kw84 and yet another problem of allocated but unused memory, also in perlio.c. This time Jarkko tried to edit the diff after generation, but was caught out by Coverit^WNicholas, who applied the change that Jarkko meant to make in the first place. http://xrl.us/kw84 Coverity fussed over a section of code in doop.c that in fact only scratched the surface of the main problem. Jarkko added a slew of tests to bop.t and fixed the real problem in the code. http://xrl.us/kw85 Yitzchak Scott-Thoennes followed up on ext/Filter/Util/Call/Call.c where calling "filter_read(-1)" would indeed produce spectacular badness. The solution probably lies in removing the signedness from the variable used, but in any event, some sort of sanity checking should be added. http://xrl.us/kw86 Yitzchak also found a problem with "NULL" in ext/Socket/Socket.c, and wondered whether the code was over-engineered, and chopping out a conditional would improve matters. Again, a defensive approach to bad data will be required. http://xrl.us/kw87 Yitzchak also prodded Nicholas into making a change to clear up an issue in ext/IO/IO.c. While it appears out that many of these issues are in fact "Can't Happen" problems from within perl, since they are guarded against elsewhere, it may wind up helping the development of XS modules, since garbage values may be caught earlier, rather than a core dump 20000 statements later on. http://xrl.us/kw88 Benjamin Holzman came back with a fix for what is probably a "Can't Happen" bug in "Storable", http://xrl.us/kw8n and another safety check in pp_sys.c that could only be triggered by XS code going out to lunch. http://xrl.us/kw89 Andy Dougherty looked at toke.c and found that Coverity incorrectly flagged some code in a loop as dead when in fact it could be reached the second time around. He therefore wanted to add a Coverity-friendly message to signal that it was legitimately "ENOTABUG" so that Coverity would not count it as a defect in the following round. Two possibilities are available, either a C comment that adheres to a specific format à la "lint", or adding an entry to their on-line database. He wondered whether, as a matter of policy, the comment should appear in the source (thus making a visible reference to what is, at the end of the day, a commercial product, and therefore giving them a sprinkling of mindshare), or just using the database. He favoured the comment approach. Andy Lester voted against the idea, arguing that tools come and go, but comments tend to remain (and worse, drift out of date). John Peacock voted for, arguing that if Coverity were to disappear tomorrow, we could always "grep" the codebase to strip them out. Hugo van der Sanden remarked that he had regularly spent time chasing through the source to determine whether a possible path between two points of code existed, and thought that Coverity was probably unable to perform the required gymnastics to arrive at a similar conclusion. Be that as it may, an occasional comment in the source, explaining these matters to future porters, would not go amiss. If Coverity can't figure it out, that's their problem. Adam Kennedy was against the comment idea too, offering the hypothesis of what was not a bug initially, becoming a real bug in six months time due to an innocuous change elsewhere, but the report being suppressed due to the initial Coverity comment. This reminds me of advice from Klortho, #11922: You don't suppress error messages, you dumbass, you PAY ATTENTION and try to understand them. The correct use of comments http://xrl.us/kw9a Andy D. then found what was probably a genuine problem, at least as far as clarity of intent is concerned, in utf8.c. http://xrl.us/kw9b Andy also looked at an issue in hv.c, which he traced to change #24810 made by Nicholas last year, but the simple fix would create a visible change in behaviour from the public API, and the complex fix was too much for him to deal with without assistance. It turns out that Coverity was right, and Nicholas resolved it with change #27761, adding a regression test that exercised some code which until now had always remained unvisited by the test suite. Bonus statement coverage improvement http://xrl.us/kw9c After his initial call to arms, Nicholas had a closer look at some of the defects. One in particular caught his eye made his wonder whether the problem was not in fact a bug in Coverity's analysis, and whether it should be reported to Coverity. David Landgren noted that on the "postfix-users" mailing list, Wietse Venema had announced a new release of Postfix, that in part dealt with Coverity findings, many of which were false positives. Wietse's thoughts on Coverity http://comments.gmane.org/gmane.mail.postfix.user/139710 A first cut at "state" variables For a long time, the only technique for creating static variables in functions à la C was to use the dubious (and now, deprecated) "my $var if 0" construct. (The officially sanctioned approach is to use an outer ("BEGIN" or bare) block and hoist the variable outside the function). This situation started to change this week, when Rafael Garcia-Suarez landed his first draft to add "state" variable to perl. Now you can do the following: $ bleadperl -le 'sub f { state $x = 10; print $x++ } f; f; f' 10 11 12 This will be available via "use feature 'state'". I thought it was nifty. A couple of people threw up their hands in horror. In order to proceed, what is needed are more tests, and to implement state arrays and hashes as well. A little rough around the edges http://xrl.us/kw9d Underscores in version numbers Jan Dubois kicked off an interesting thread concerning underscores in version numbers, the problems they pose, how to work around those problems, what happens with dual-lifed modules, the CPAN indexer and a mythical script belonging to Randal that checks if the universe is in sync. I never know which version I'm going to be http://xrl.us/kw9e Benchmarking "perlbench" Jim Cromie presented some benchmarks concerning his work to replace "S_new_HE" with "Perl_new_body" and asked for some advice as to how to proceed, and received none. http://xrl.us/kw9f Following on from these efforts, Jim looked at benchmarking the same executable against itself five times. He was happy that the overall averages all came out to 100%, but many individual tests showed variations of up to 2%. Jim felt that this constituted a threshold noise factor, below which differences are worthless. Jim then wondered whether different CPUs and platforms would have different thresholds, and whether such information should be collected in a more systematic manner. Benchmarking perlbench http://xrl.us/kw9g Doing battle with old AIX compilers Jarkko discovered that AIX's "xlc" C compiler will do the following: #define FOO(n) printf("n = %d\n", n) FOO(10); # expands to "10 = 10\10" which is, while apparently legal, also quite useless. He therefore patched a couple of files to work around the breakage this introduces. Lukas Mai cited the C standard, chapter and verse (ISO 9899:1999, page 152, footnote 144) that indicates that the above compiler behaviour is indeed incorrect. Nick Ing-Simmons said that it used to be legal, but ANSI/ISO tightened the specification in a latter revision to the standard, and the compiler is adhering to the previous standard. H.Merijn Brand pointed out that other "old" compilers continue to be supported as capable of compiler perl, and offered some insights into the issues surrounding C compilers on AIX. What could you do with a macro like that? http://xrl.us/kw9h "open(FH, ...)" in not like "open FH, (...)" Ken Williams was trying to concoct a multi-argument open function to avoid using backticks, and the attendant shell-quoting problems, but was having trouble sneaking it past 5.005. It wouldn't actually have to run on 5.005, but everything Ken tried resulted in compile-time errors, or else if it was accepted by 5.005, it didn't do anything useful on 5.6+. Mike Guy offered a venerably ancient technique that would possibly still work with punched cards, and had an added bonus of separating out the "open" and "fork" into discrete steps, thereby permitting fine-grained error checking. Revise your classics http://xrl.us/kw9i Looking for cut-and-paste programming Jarkko launched "cpd" (cut-and-paste-detector) at a recent copy of "blead" to see what would happen. Andy Lester was so impressed he wanted a Makefile "cpd" target so that he could see how it was invoked. Jarkko deferred, saying that the tool is still a little fragile, being unable to parse perl's source code completely. At the moment he's working with the author to shake out the remaining bugs. Stand back http://xrl.us/kw9j Andy then took the chainsaw to dump.c. which had acquired some duplicated code in the process of incorporating Larry Wall's MAD work. (In case I haven't mentioned it already, MAD stands for Misc Attribute Decoration and is the process of hanging sufficient information off the op-tree to be able to recover the source code afterwards. Up until now, the compilation phase has simply been required to produce bytecode for the run-time interpreter, and it's usually impossible to figure out by inspecting the bytecode to figure out what the original Perl source would have looked like (think: peep-hole optimisations). Being able to go from source code to bytecode back to source code is an important step in getting Perl 6 to run Perl 5 code). http://xrl.us/kw9k The first time through, the patch didn't stick, so Andy did it again. http://xrl.us/kw9m CPD project page http://pmd.sourceforge.net/cpd.html Measuring code complexity Jarkko finished with a discussion on code complexity, noting that Coverity gives you the McCabe Cyclomatic Complexity, the Halstead Effort and the Halstead Error Estimate. The results of for perl seem about right: "Perl_keyword" in toke.c is as complex as the following thirteen most complex functions combined (featuring such family favourites as "Perl_magic_get", "Perl_is_gv_magical" and "S_looks_like_bool"). Yitzchak wanted to know whether macros were expanded or not in calculating the indices, because in a codebase with such heavy uses of macros as perl's, the differences in perceived complexity are significant. Jarkko thought that they weren't. Anything that attempted to resolve the macros in sv.c would blow a fuse. Statistician's delight http://xrl.us/kw9n Patches of Interest Wrapping up the "IO::Socket" tests on "Win32" Yves Orton polished his patch to make the "IO::Socket" tests pass on "Win32". Jim Cromie updated concise-xs.t, because the "B::Concise" tests picked up the API changes that Yves introduced. All sockets are go http://xrl.us/kqp4 In another sub-thread on this topic, Nick Ing-Simmons circled back to the problem of how to determine whether a Windows perl can "fork" or not. The problem is one of semantics: yes, perl on Windows can "fork", but without creating a new process, or allocating a new memory space, so it hardly counts as a POSIX "fork", even if it looks the same at a certain distance. For this reason, the $Config{d_fork} should not be used on "Win32". Andy Dougherty nevertheless maintained that *something* in %Config should be available, such as a putative $Config{d_pseudofork} key, the idea being that people shouldn't have to grovel through $Config{ccflags} to try to determine whether particular combination of flags present or absent means that a specific feature or behaviour is available. So I guess we need a meta $Config{some_sort_of_fork} http://xrl.us/kw9o Overridable filetest operators Salvador Fandiño pitched his patch to add "/", "^" and 1 as prototypes for user function to allow them to mimic accurately the built-in functions. Warnocked http://xrl.us/kw9p Renaming variables in some mg.c routines Andy Lester noted that in a couple of routines, nothing is ever read from the "mg" parameters that are passed in, and worse, are used by the code to stash intermediate calculations. So Andy marked them as Unused, and declared some new local variables whose names better reflect their purpose. Refactoring at its finest http://xrl.us/kw9q New and old bugs from RT "chr(65535)" should be allowed in regexes (#38293) Back in January, Marc Lehmann filed a bug report concerning the possibilities available for matching (or not) "chr(65535)". Sadahiro-san, resident UTF-8 guru, examined the problem in depth, uncovered a number of inconsistencies surrounding such Unicode code-points and wrote a patch to clean it up. Said patch includes tests (yay!) to ensure the problem doesn't come back, and more tests (double yay!) for a related bug (#37836). Rafael wondered whether perlunicode.pod should be updated to document more precisely what happens when "use warnings 'utf8'" is in force, but Tomoyuki answered that it would probably be better to rework perl to deal with Unicode non-characters more reasonably, as per the standard. http://xrl.us/kw9r At the same time, Ilya Zakharevich ran into this exact problem on "comp.lang.perl.misc". It's a small world http://xrl.us/kw9s "/(??{ "(PAT)" })/" doesn't set $1 (#37407) Dominic Dunlop returned to this bug, noting that my $dot = qr{ () }x; "" =~ /(??{ $dot })/x; no longer dumps core on "blead", but then again it doesn't dump core for 5.8.6 or 5.8.8 either. On the other hand, "a" =~ /(??{ "(a)" })/ which was Abigail's original problem in the bug report doesn't capture the 'a' into $1. Hugo thought that, given the documentation, this was not a bug: the implementation just isn't up to this sort of caper. Dominic thought that the documentation should be tightened up to explain more precisely how "(??{})" currently behaves. Abigail conceded the point, but offered a specific real world example where the ability would come in handy (matching shortened IPv6 addresses). http://xrl.us/kw9t Memory leak occurs when an "eval" statement exits by a signal (#38854) Itsuro Oda reported a problem when dying via a "SIGALRM" handler in an "eval" block, with a nice short test case to show the good and the bad. Warnocked http://xrl.us/kw9u Failing to build lib/File/Basename.pm (#38891) Cliff Liu tried to build perl, and it failed with some peculiar errors when building lib/File/Basename.pm. http://xrl.us/kw9v Those bleeding greedy quantifiers (#38906) Japhy found an odd corner-case in the regexp engine where greediness and quantifiers get confused and located the likely culprit in regexec.c. "Animator" took a stab at resolving the problem, which is no mean feat considering it was h(?:er|is) first attempt at patching the regexp engine. Dave Mitchell took it and cleaned it up for "blead" and included Japhy's original test-case bug snippets. http://xrl.us/kw9w Perl5 Bug Summary The week before last (twenty less than the previous week, all hail Steve Peters): http://xrl.us/kw9x Last week (six more closed): http://xrl.us/kw9y The remaining 1537 are here http://rt.perl.org/rt3/NoAuth/perl5/Overview.html New Core Modules * ExtUtils-Install version 1.38 uploaded by Yves Orton. This handles the problems on Win32 dealing with the unlinking of open files, and also adds an "INSTALL.SKIP" directive that users of revision control systems should appreciate. Following a query from Rafael, Yves explained the difference between "INSTALL.SKIP" and "MANIFEST.SKIP". http://xrl.us/kw9z * H.Merijn Brand uploaded The latest and greatest "dor" patch (the "$var //= $eigenvalue" trick from Perl 6) for application to to the current "maint" snapshot. Not exactly a module, but hard to live without once you've grown used to it. http://xrl.us/kw92 In Brief The "use sort 'stable'" sorting in reverse bug was fixed by Robin Houston. http://xrl.us/kw93 Jarkko Hietaniemi patched "ext/IO/t/io_unix.t" to fall back and use /tmp should the current working directory have permissions too restrictive to allow sockets to be created. http://xrl.us/kw94 The issue with "pow" failures on AIX, and how to work around it, was sorted out. http://xrl.us/kw95 Jim Cromie supplied a long update to his current obsession (arenas for op-codes), and a patch to sv.c. http://xrl.us/kw96 Nicholas Clark noted that a better strategy for testing "Perl_ss_dup" is required, as it never gets called on Unix, as its main use is in association with the pseudo-forking code on Windows. http://xrl.us/kw97 Hugo van der Sanden fixed a problem setting %ENV keys to "undef" that was causing the test suite to emit a faint burning smell. http://xrl.us/kw98 Jerry D. Hedden reposted his patch to sync "blead"'s "threads" with CPAN. Rafael found that it did not compile on older versions of HP-UX (that is, 10.20, unsupported by HP for a couple of years now). This will be cleaned up in a subsequent patch. http://xrl.us/kw99 More changes here: http://xrl.us/kxaa Jan Dubois patched threads.pm to overload the "!=" operator as "==" is overloaded to allow threads to be compared by thread id, since overload.pm cannot (or does not) implicitly derive "!=" from "==". http://xrl.us/kxab In doing so, tidied up the placement of the documentation for "~~" (smart match). http://xrl.us/kxac Joshua ben Jore arranged things so that "foreach (...)" isn't a "B::Lint" warning anymore. Hugo and Rafael both commented on the proposal, and Joshua defended his position with ease. http://xrl.us/kxad Steve Hay was struggling with the "PERL_UNUSED_DECL" change (27649) breaking threaded builds on Win32 with gcc-3.4.2. In space no-one can hear you scream http://xrl.us/kxae Ravi Sastry had a problem with lib/ExtUtils/t/Constant.t on z/OS. Sadahiro-san, resident EBCDIC guru, spotted an suspect ASCIIism in a complemented character class and spelt it out longhand. A conversation on the finer points of EBCDICisms ensued, and Ravi finally got it working to his satisfaction. http://xrl.us/kxaf Continuing on z/OS, Mohammad Haseen had problems with "-DPERL_EXTERNAL_GLOB", which dictates to perl whether it should handle globbing itself or defer to an external process. http://xrl.us/kxag He was also having problems with lib/ExtUtils/t/Embed.t. Nick Ing-Simmons was suspicious of the compiler switches used, and suggested some work-arounds. http://xrl.us/kxah Nick Ing-Simmons carefully explained the advantages and differences of dynamic versus static builds of Perl. http://xrl.us/kxai Upcoming versions of Solaris will permit 32-bit processes to open more than 256 "stdio" file handles. Alan Burlison sent in a pre-emptive patch to allow "gcc" to deal with the change. Your standard preprocessor trickery http://xrl.us/kxaj Dominic Dunlop went through RT looking for tickets involving postponed regexes "(??{...})" and found nine. He then summarised the situation of each one. http://xrl.us/kxak Yann Combarnous offered a patch to silence an "uninitialized value" warning in CGI.pm (bug #38865). http://xrl.us/kxam Chris Dolan identified a problem with changing $0 on Darwin leads to excessive padding in "ps" (bug #38868) http://xrl.us/kxan Jan Dubois posted a patch to ease the combination of UTF-16 with ":crlf". Nick Ing-Simmons started to have second thoughts on the approach. http://xrl.us/kxao John E. Malmberg published an RFC concerning UTF-8 file specifications on VMS. Steve Hay wanted the same for "Win32". Nicholas Clark helped John finalise his patch. http://xrl.us/kxap Steffen Ullrich posted a bug showing how to crash perl by having $1 bound to an out-of-scope variable. (bug #38869) http://xrl.us/kxaq Joshua ben Jore is a sick person. He uses emacs for a start. On top of that, he h(ij)?acked his syntax checking minor mode to refuse to save the file if it doesn't lint cleanly. Download his code, and you can too! http://xrl.us/kxar Dan Kogai was happy to discover that search.cpan.org now groks the "=encoding" directive, which improved the presentation of his modules there. Tels rushed off to add Unicode examples to his POD. http://xrl.us/kxas In between bouts of jousting with Coverity, Andy still found some time to deliver some consting goodness in regcomp.c. Dave applied most of it, but held back on one part as he's about to let more regcomp.c improvements escape from the basement. http://xrl.us/kxat Philip M. Gollucci ran into trouble, due to the recent changes concerning "PERL_UNUSED_DECL" when compiling Apache's "apreq". It is apparently something to do with ppport.h, but his diff appeared to rewrite ppport.h in its entirety, so I'm not sure anyone knew what to do with it. http://xrl.us/kxau Torsten Foertsch was having problems with "("x"x32769)=~/\A(.)\1*\z/s and print "$1\n"" and wondered what to do about it. Hugo explained what was going wrong, and realised in passing that the diagnostics.pm diagnostic needs a bit of work, following on from Dave's recursive-to-iterative transformation of the regexp engine. http://xrl.us/kxav Jerry D. Hedden took a third attempt at synching "blead" with CPAN's "threads". Rafael put it through the wringer and came up with some problems in conjunction with "PERL_TRACK_MEMPOOL" and offered advice as to where things could be breaking. Rafael made a couple of other comments on the changes and finished with a word of thanks, because few people have had the courage to venture into this code and attempt to clean it up. http://xrl.us/kxaw Andy tweaked the "FIT_ARENA" macros. Jim Cromie explained that what Andy had done was to re-merge a macro that H.Merijn had previously split apart into two, but could no longer recall what necessity had driven H.Merijn to do such a thing. http://xrl.us/kxax Linda Walsh tweaked Benchmark.pl to remove spurious warning that occurs when the ":hireswallclock" option is used. http://xrl.us/kxay Jan Dubois taught "Pod::Html::depod()" how to deal with multi-line strings and update the test suite to boot, http://xrl.us/kxaz and also fixed up anchor generation in "Pod::Html" for "=item item 2". http://xrl.us/kxa2 Hervé Guillemet had a problem with nested closures losing their references to outer variables, noted in bug (#38895). Yitzchak explained that the problem had been fixed in "blead", but that the change was unlikely to make it back to "maint", and offered a simple technique to route around the damage. http://xrl.us/kxa3 Andy Lester made a simple, but elegant improvement to mg.c to make it clearer what was being returned in "Perl_magic_scalarpack", and elsewhere to split the use of variable that had been pressed into use in two distinct roles into two separate variables. This is has been pretty much the overall aim of Andy's refactorisations over the past months; it's only now that he's starting to get there. http://xrl.us/kxa4 H.Merijn implemented a trick in "Configure" to introduce a new "-DEBUGGING" switch that would be an improvement over "-DDEBUGGING". Many people appeared to appreciate the concept. http://xrl.us/kxa5 Slaven Rezic tweaked "perlfaq8" via bug report #38901 to improve how to discover if I'm running interactively or not. http://xrl.us/kxa6 Jerrad Pierce looked at "Module::Corelist" through the lens of perl 4.036 and came up with a number of additions for it, arguing that it would have a certain educational value. Rafael remained somewhat unconvinced. http://xrl.us/kxa7 Nicholas Clark revived and old thread started by Jos I. Boumans concerning a Bug or Limitation of Filehandles in "pp_require". http://xrl.us/kxa8 This then segued into code references in @INC and source filters. Nick Ing-Simmons mentioned a truly mind-boggling use that he had put it to. http://xrl.us/kxa9 So Nicholas went ahead and changed what he said he'd change, but then discovered "Filter::Simple" error messages getting mangled inside "require" (#38920). http://xrl.us/kxba Andy Lester cached a pointer dereference to a bitfield, in the hope of improving the performance of "is_list_assignment" in op.c. Nicholas knew from bitter experience that it is hard to outsmart compilers these days, but applied the patch anyway. Take 1 http://xrl.us/kxbb Take 2 http://xrl.us/kxbc Andy finished by removing an unused variable in a macro. http://xrl.us/kxbd Feedback from the previous summary H.Merijn Brand carefully explained just what it takes to pull a "Configure" script out the constituent pieces, http://xrl.us/kxbe bug #34349 is still open, http://xrl.us/kxbf I flipped a bit concerning the layer problem Jan Dubois found, http://xrl.us/kxbg and Jerry Hedden explained that thread stack size sizing is even trickier than first thought. http://xrl.us/kxbh About this summary This summary was written by David Landgren. Last week I was in England on holiday. As I was wandering around Salisbury cathedral, I kept thinking "Hmm, I hope there won't be too much traffic on p5p this week". HA! 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."