This Week on perl5-porters - 27 October-2 November 2008
"So we're doing things at BEGIN time in UNIVERSAL with source
filters. With a garnish of messing with @ISA in some other classes.
What could possibly go wrong?" -- Nicholas Clark, trying to address
serious bugs lurking somewhere in code this funky.
Topics of Interest
[EMAIL PROTECTED]
More feedback on the march to 5.8.9. Dave Mitchell fixed up the
problems with "SUPER" method caching. Nicholas uncovered a can of
worms in "Attribute::Persistent".
Indeed, imacat had found the problem six months ago.
"File::Path" was the long pole holding up the tent for the past couple
of weeks (my fault). 2.07 is now on CPAN, and addresses the symlink
flaw that the Debian project uncovered.
slogging on
http://xrl.us/ow3g3
Fix for failed Gconvert detection under C++
Tony Cook fixed up a C configure probe that wasn't valid under C++.
H.Merijn Brand thanked him and stowed the change away in the
metaconfig machinery.
better C park
http://xrl.us/ow3g5
@{"_<$filename"} is unreasonably tied to use of DB::DB ($^P & 0x2)
Tim Bunce learnt that you can't introspect the source code of files
without dropping down into single-step mode. This made him sad,
because it meant that "eval"ed code was more or less out of reach of
his current obsession, "Devel::NYTProf".
Not letting such a minor issue get in his way, Tim proposed a patch to
give him sufficient fine-grained control to achieve his ends. Nicholas
Clark found the time to run with the patch and produce something that
was compatible with 5.8.9-RC1 (yes, coming soon to a mirror near you).
profiling evals
http://xrl.us/ow3g7
http://xrl.us/ow3g9
Perl Unicode bug
On the continuing saga of Karl Williamson's single-handed battle to
slay the Unicode deficiencies in Perl, Juerd Waalboer commented that
"use ascii" had a lot going for it as a putative pragma to deal with
the matter. Rafaël wanted to see 'legacy' appear somewhere in the
name.
Tom Christiansen penned a fine missive on the perils of "\w", "\s",
"\b" and even "\d", pointing out that a certain dingbat character is
classified as a digit, but alas, MATHEMATICAL SANS-SERIF BOLD ITALIC
CAPITAL PI isn't. Which is he's given up on all those shortcuts. As a
parting gift, he offered some code to check ASCII characters against
all Unicode properties and so forth.
Yves Orton had a look at the matter from the perspective of the
regular expression engine, and felt that adding "/a" and "/u"
modifiers to enforce ASCII or Unicode semantics would be horribly
painful to implement, and said that he was leaning more towards
ASCIIish semantics (for instance "\d", "\w" and "\s" would recover
their pre-Unicode meanings), the idea being that people doing Unicode
can use properties instead.
this property is condemned
http://xrl.us/ow3hb
"perl5db" questions
Edward Peschko had some questions about how the Perl debugger
interacts with the perl binary, so that he could debug the debugger
debugging a Perl script with gdb. Nicholas Clark pointed him in
vaguely the right direction. Richard Foley suggested quite innocently
to Edward that if he came up with anything useful it would be
worthwhile patching the debugger or "Devel::Trace".
a debugger's debugger
http://xrl.us/ow3hd
Why are the file test operators in perlfunc?
Michael G. Schwern wondered with the documentation for file test
operators ("-f", "-s" ...) lives in "perlfunc" rather than "perlop".
Eirik Berg Hanssen pointed out that if such a change was made, then he
would miss the "perldoc -f -X" shortcut.
David Nicol pointed out that "perlfunc" also mentions "last", "next"
and "redo", which are flow control syntax. And thus it's easy to get
at them with "perldoc -f" too.
Renée Bäcker had a patch lying around in an RT ticket (bug #27886)
that, if applied, would extend the "-f" switch to look inside "perlop"
as well.
In the end, the problem is no so much where the documentation lies,
but rather one of how easy it is to obtain.
http://xrl.us/ow3hf
http://xrl.us/ow3hh
RFC: version.pm "qv()" confusion
Following on from the humonguous threads about version comparison code
(and the injection of things into the UNIVERSAL namespace), John
Peacock put forward a proposal to try and put an end to the confusion
that surrounds the issue of handling version numbers in Perl.
Michael G. Schwern penned a very thoughtful reply describing the
problems in terms the mental representations that people have
developed to remember how (they think, correctly or otherwise) version
numbers work. He continued by reviewing the documentation, suggesting
better examples, and pointing out that the fact that 1.2 is considered
greater than 1.3.0 is a trap waiting to fool the unwary.
Dave Golden also chipped in with a number of sensible suggestions and
volunteered to rewrite the documentation in terms of whatever changes
were finally agreed upon.
http://xrl.us/ow3hj
http://xrl.us/ow3hm
CPAN-1.9301 can't clean bootstrap .cpan
Nicholas Clark uncovered a problem with the version of the CPAN shell
slated to be included in 5.8.9. Since the p5p summariser was busy with
other matters In Real Life and had not wrapped up the final version of
"File::Path", Nicholas had the time to confer with Andreas König to
determine the right thing to do.
http://xrl.us/ow3ho
http://xrl.us/ow3hq
Deprecating "Time::Local"?
Dave Rolsky was so impressed by Time::y2038 that he planned to rewrite
Time::Local in terms of it, and add a warning saying it was deprecated
and just use Time::y2038 instead kthx.
Jesse Vincent wanted to know if Dave meant a warning in the
documentation, rather than the code, since there must be an awful lot
of code in the DarkPAN that uses it. Dave did indeed mean a disclaimer
in the documentation.
He had a second look, and decided that it wasn't even worth the hassle
of trying to do anything, other than just recommending people use
Time::y2038 and be done with it.
http://xrl.us/ow3hs
TODO of the week
A task that needs some Perl and internals knowledge.
Deparse inlined constants
Code such as this
use constant PI => 4;
warn PI;
will currently deparse as
use constant ('PI', 4);
warn 4;
because the tokenizer inlines the value of the constant subroutine
"PI". This allows various compile time optimisations, such as constant
folding and dead code elimination. Where these haven't happened (such
as the example above) it ought be possible to make "B::Deparse" work
out the name of the original constant, because just enough information
survives in the symbol table to do this. Specifically, the same scalar
is used for the constant in the optree as is used for the constant
subroutine, so by iterating over all symbol tables and generating a
mapping of SV address to constant name, it would be possible to
provide "B::Deparse" with this functionality.
"checkpods" -> "podchecker"
Woohoo! Alex Vandiver took a crack at solving the
"checkpods"/"podchecker" redundancies, and supplied patches galore to
do the deed.
TODO: patch review
http://xrl.us/ow3hu
Patches of Interest
Module/Build/t/compat.t failure
Robin Barker sent in a patch to fix up an error that occurs when the
"PREFIX" environment variable is set. Michael G. Schwern thanked him
for his work, and tossed in a couple more suspect variables names into
the mix.
http://xrl.us/ow3hy
Explicit empty while loops
Robin also made a couple of changes in op.c to change "while(cond);"
constructs to "while(cond) {}". He thought this made the empty loops
more explicit, and besides, it silences a g++ warning. Rafaël
Garcia-Suarez applied the patch in the following month.
meanwhile
http://xrl.us/ow3h2
http://xrl.us/ow3h4
Large omnibus patch to clean up the JRRT quotes
Tom Christiansen went through all the C source files and corrected the
Tolkien quotes that appear at the top, and explained why it was so
important. Johan Vromans wondered why Tom had cited page numbers,
since these may change from edition to edition. Tom thought that a
good place to note the editions used would be in "perlhack", since
only hackers would be likely to encounter them in the source. This was
accepted.
Jan Dubois gathered all the Tolkien quotes Sarathy used to announce
the 5.005 builds.
Tom went back and produced a second patch, this time against blead. He
noted that ext/threads/shared/shared.xs contains a non-Tolkien quote,
and wondered if a better Tolkien quote might not be found, should the
original authors of the file agree. Artur responded positively to the
idea.
Working further afield, Tom found another quote that could be applied
to ext/Win32CORE/Win32CORE.c.
The Road goes ever on and on
http://xrl.us/ow3h6
http://xrl.us/ow3h8
Be more explicit about magic @ARGV
Moritz Lenz wrote a documentation patch to explain that "<>" doesn't
open files from @ARGV, but passes them to "open()" instead. After
careful review, it was applied.
http://xrl.us/ow3ia
New and old bugs from RT
"Cwd::realpath" doesn't work on files on Windows (#29570)
Andrew Pimlott could no longer recall how to trigger this bug and
suggested it could be closed.
reply to reopen
http://xrl.us/ow3ic
perl-5.10.0 glibc detected *** free(): invalid pointer: 0x553c6700 (#51238)
Warren Dodge was pleased to hear that Michael J. Krueger was
experiencing the same problems with a module from Rational that was
failing on 5.10. He lodged a bug report (a PMR) with Rational and
wanted to know if Michael gave him permission to forward his report to
Rational as well. No word back from Michael.
http://xrl.us/ow3ie
Document $var, $arg, $type and $ntype XS variables (#51992)
In response to Michael G. Schwern's plea for better documentation on
matters XS, Renée Bäcker replied with a web page that he found useful.
Living as it does in a "~person" home page, it would be good to get it
onto the Wiki. (Hint hint).
but ask for permission
http://xrl.us/ow3ig
http://www.perlfoundation.org/perl5/index.cgi
semi-panic: attempt to dup freed string (#54114)
It has to said: people make Perl do the strangest things. Consider the
following program:
my $r = f();
my @a = @$r;
sub f {
push @a, undef;
return [EMAIL PROTECTED];
}
It works, after a fashion, but the interpreter is left dithering as to
whether it should panic or not. Six months later, Dave Mitchell gave
his analysis on the underlying cause.
half way fixed
http://xrl.us/ow3ii
"m/a{1,0}/" compiles but doesn't match a literal string (#56526)
Is now an error in blead.
and we test!
http://xrl.us/ow3ik
Can't use "v[0-9]+" as label (vstring) (#56880)
Renée Bäcker sent in a patch to correct this problem, but Rafaël
didn't like the patch format, and also asked about a boundary
condition (labels with colons). Renée replied with a better patch, but
wondered if the patch responded to Rafaël's initial criticism.
like a version, patched for the very first time
http://xrl.us/ow3in
"chr(0400) =~ /\400/" fails for >= 400 (#59342)
Yves Orton dropped by to say that he thought it was fundamentally
impossible to reconcile octal escapes and backreferences within a
regular expression, and that by perl 5.14, octal escapes in a regular
expression should be illegal. For instance, the interpretation of
"\17" is either the seventeenth back-reference or "chr(15)", depending
on spooky action at a distance.
Karl Williamson reiterated his request for a verdict on whether his
patch is worthy or not (the main sticking point being whether it
should be silent, a warning or an error, contingent as it is on
machines having other than 8-bit bytes). Glenn Linderman replied, but
said that the final cut belonged to the pumpking.
perl on a UNIVAC 2200 series?
http://xrl.us/ow3ip
Program to look at char class complements (#60156)
Karl Williamson noted that some characters are matched by both a POSIX
character class... and the complement of the same character class.
Ideally, all characters should be matched by only one or the other,
not both.
Yves Orton ran some code to probe the Unicode space, and discovered a
distressingly high number of Unicode characters with the same
behaviour. He explained that the problem is essentially due to a speed
optimisation, and the difficulty is reconciling not slowing down
non-Unicode matches against a complete rewrite of the character class
implementation.
Yves also noted that, to a certain extent, some of the problems are of
our own making, such as a discrepancy between what POSIX defines, and
what is implemented in mktables. Rafaël deflected some of Yves's
criticism by pointing out that "perltodo" already stated the how the
current situation was broken. Yves continued with a post mortem of
decisions past, pointing out where and when we messed up when bringing
Unicode handling into Perl.
In another sub-thread, it took considerable traffic to define the
exact POSIX equivalency of "\w".
the "you can have your pie and eat it" bug
http://xrl.us/ow3ir
Unhelpful error message from unpack (#60204)
Nigel Sandever noted that "unpack 'v/a*', qq[a]" spat out a "'/' must
follow a numeric type in unpack" which was less than helpful for
understanding what the problem was. Marcus Holland-Moritz agreed that
the message stank and wrote a patch to make things a little clearer.
Rafaël was not entirely convinced.
http://xrl.us/ow3it
Stacked file operators (#60214)
Abigail discovered that "-s -f 'zero-sized-file'" works, but "-f -s
'zero-sized-file'" doesn't. Rafaël fixed it.
http://xrl.us/ow3iv
"mro::method_changed_in(..)" ignores AUTOLOAD (#60220)
Laurent Dami discovered that dynamically created "AUTOLOAD" routines
in parent packages aren't seen by previously dynamically created child
packages. Tony Cook offered a patch to correct this situation.
I told you AUTOLOAD was evil
http://xrl.us/ow3ix
http://xrl.us/ow3iz
Changing $#array in local sub array affects global $#array (#60222)
probably ENOTABUG
http://xrl.us/ow3i3
Method cache not updated when dynamic subclass loaded through
"Storable::thaw" (#60232)
"Storable" will "require" a module when asked to thaw an object.
Having a coderef in @INC to catch requirements of dynamically created
classes used to work in 5.8, but Laurent Dami discovered that it is
broken in 5.10. He provided a snippet to demonstrate the problem, but
no-one had a solution.
http://xrl.us/ow3i5
Broken regexp behaviour for strings produced by
"Crypt::Rijndael::decrypt" (#60246)
"vvv" reported a problem with "Crypt::Rijndael". Nicholas traced the
problem down to two sources. The first one was with "Crypt::Rijndael"
not correctly terminating C strings with a binary "\0". The second was
with the regular expression engine incorrectly relying on C string
behaviour and looking for a zero-terminated string, instead of using
the internal length attribute of the string. He suspected that it
might be possible to generate an incorrect result against a Perl
string containing an embedded binary zero.
we need a test
http://xrl.us/ow3i7
croak(0) crashes (#60262)
Marc Lehmann uncovered a flaw with "croak" but elicited no comments.
http://xrl.us/ow3i9
"threads::shared" resets %hash iterators (#60294)
kbrintn showed a problem with hashes in threads, and how it becomes
impossible to iterate over the keys within a hash of hashes.
http://xrl.us/ow3jb
Perl5 Bug Summary
1341 (+11 -9)
http://xrl.us/owaqw
http://rt.perl.org/rt3/NoAuth/perl5/Overview.html
New Core Modules
constant 1.17
http://xrl.us/ow3jd
Time::Local 1.19
Dave Rolsky uploaded a new version of "Time::Local" for the 5.10.1
and 5.8.9 maintenance branches, grumbling over the fact that core
was patched instead of having the changes dealt with first in the
CPAN version. This is an interim release until Dave and porters
figure out how to deal with the module in the light of Michael G.
Schwern's Y2038+ work.
http://xrl.us/ow3jf
This followed on from a thread started by Jan Dubois, who was
anxious to see "Time::Local" working on 64-bit platforms
post-2038.
http://xrl.us/ow3jh
In Brief
Andreas König ran into a warning with "installperl" and offered a
patch that Nicholas applied.
http://xrl.us/ow3jj
Karl Williamson wrote some code and asked the porters to please check
if this small code snippet looks correct. But no-one did! I mean
really, is it so difficult to confirm the right way to create a scalar
value containing a single arbitrary unicode codepoint in UTF-8?
yes, apparently
http://xrl.us/ow3jm
Renée Bäcker found another 7 tickets with patches in RT.
some assembly required
http://xrl.us/ow3jo
Peter Scott wanted to have a warning on abandoned statements, thus
independently reinventing bug #59802 ("return 0 or die"). Elliot Shank
said that the problem was already solved with a "Perl::Critic" policy.
http://xrl.us/ow3jq
Steve Hay has a Cygwin installation that is still unhappy with the
update to "Archive::Extract" 0.28.
http://xrl.us/ow3ju
Kevin Ryde spotted a flaw in the $Carp::Internal{__PACKAGE__}
documentation example (filed as bug #60300). Rafaël Garcia-Suarez
amended the documentation accordingly.
deceptive packaging
http://xrl.us/ow3jw
Rafaël Garcia-Suarez applied Renée Bäcker's patch to solve the Too
late for "-CS" option problem, thus closing bug #59652.
applied
http://xrl.us/ow3jy
Last week's summary
This Fortnight on perl5-porters - 28 September-12 October 2008
http://xrl.us/ow3j2
This Week on perl5-porters - 13-19 October 2008
http://xrl.us/ow3j4
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?