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.
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
Nicholas Clark suspects this bug is yet another case of the stack not being reference counted.
wontfix http://xrl.us/bkyuf
-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
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
/(?:(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
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
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
(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
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.
This summary was written by David Landgren.
Weekly summaries are published on http://use.perl.org/ and posted on a mailing list, (subscription: perl5-summary-subscribe@perl.org ). The archive is at http://dev.perl.org/perl5/list-summaries/ . Corrections and comments are welcome.
If you found this summary useful, please consider contributing to the Perl Foundation or attending a YAPC to help support the development of Perl.