Fix (or rewrite) the implementation of the C</(?{...})/> closures.
+=head1 A re-entrant regexp engine
+
+This will allow the use of a regex from inside (?{ }), (??{ }) and
+(?(?{ })|) constructs.
+
=head1 pragmata
=head2 lexical pragmas
The regexp optimiser is not optional. It should configurable to be, to allow
its performance to be measured, and its bugs to be easily demonstrated.
-=head2 common suffices/prefices in regexps (trie optimization)
-
-Currently, the user has to optimize C<foo|far> and C<foo|goo> into
-C<f(?:oo|ar)> and C<[fg]oo> by hand; this could be done automatically.
-
=head1 POD
=head2 POD -> HTML conversion still sucks
Make the peephole optimizer optional.
+=head2 You WANT *how* many
+
+Currently contexts are void, scalar and list. split has a special mechanism in
+place to pass in the number of return values wanted. It would be useful to
+have a general mechanism for this, backwards compatible and little speed hit.
+This would allow proposals such as short circuiting sort to be implemented
+as a module on CPAN.
+
=head2 lexical aliases
Allow lexical aliases (maybe via the syntax C<my \$alias = \$foo>.
The old perltodo notes "This has been done in places, but needs a thorough
code review. Also fchdir is available in some platforms."
-=head2 foreach reverse
+=head2 Constant folding
-The old perltodo notes that we could optimise foreach to iterate in reverse.
-(instead of making a reversed copy on the stack)
+The peephole optimiser should trap errors during constant folding, and give
+up on the folding, rather than bailing out at compile time. It is quite
+possible that the unfoldable constant is in unreachable code, eg something
+akin to C<$a = 0/0 if 0;>
=head1 Tests
A test suite for the B module would be nice.
-=head2 Improve tests for Config.pm
-
-Config.pm doesn't appear to be well tested.
-
=head2 common test code for timed bailout
Write portable self destruct code for tests to stop them burning CPU in
=head2 make HTML install work
+=head2 put patchlevel in -v
+
+Currently perl from p4/rsync ships with a patchlevel.h file that usually
+defines one local patch, of the form "MAINT12345" or "RC1". The output of
+perl -v doesn't report that a perl isn't an official release, and this
+information can get lost in bugs reports. Because of this, the minor version
+isn't bumped up until RC time, to minimise the possibility of versions of perl
+escaping that believe themselves to be newer than they actually are.
+
+It would be useful to find an elegant way to have the "this is an interim
+maintenance release" or "this is a release candidate" in the terse -v output,
+and have it so that it's easy for the pumpking to remove this just as the
+release tarball is rolled up. This way the version pulled out of rsync would
+always say "I'm a development release" and it would be safe to bump the
+reported minor version as soon as a release ships, which would aid perl
+developers.
+
=head1 Incremental things
Some tasks that don't need to get done in one big hit.
=head2 Optimize away @_
-The old perltodo notes "Look at the "reification" code in C<av.c>"
+The old perltodo notes "Look at the "reification" code in C<av.c>".
=head2 switch ops
the dormant C<nswitch> and C<cswitch> ops in F<pp.c>; using these opcodes would
be much faster."
-** Attach/detach debugger from running program
+=head2 Attach/detach debugger from running program
The old perltodo notes "With C<gdb>, you can attach the debugger to a running
program if you pass the process ID. It would be good to do this with the Perl
debugger on a running Perl program, although I'm not sure how it would be done."
ssh and screen do this with named pipes in tmp. Maybe we can too.
+=head2 A decent benchmark
+
+perlbench seems impervious to any recent changes made to the perl core. It would
+be useful to have a reasonable general benchmarking suite that roughly
+represented what current perl programs do, and measurably reported whether
+tweaks to the core improve, degrade or don't really affect performance, to
+guide people attempting to optimise the guts of perl.
+
+=head2 readpipe(LIST)
+
+system() accepts a LIST syntax (and a PROGRAM LIST syntax) to avoid
+running a shell. readpipe() (the function behind qx//) could be similarly
+extended.
+
+=head2 Self ties
+
+self ties are currently illegal because they caused too many segfaults. Maybe
+the causes of these could be tracked down and self-ties on all types re-
+instated.