=head1 NAME todo - Perl TO-DO list =head1 DESCRIPTION This is a list of wishes for Perl. The most up to date version of this file is at L The tasks we think are smaller or easier are listed first. Anyone is welcome to work on any of these, but it's a good idea to first contact I to avoid duplication of effort, and to learn from any previous attempts. By all means contact a pumpking privately first if you prefer. Whilst patches to make the list shorter are most welcome, ideas to add to the list are also encouraged. Check the perl5-porters archives for past ideas, and any discussion about them. One set of archives may be found at L What can we offer you in return? Fame, fortune, and everlasting glory? Maybe not, but if your patch is incorporated, then we'll add your name to the F file, which ships in the official distribution. How many other programming languages offer you 1 line of immortality? =head1 Tasks that only need Perl knowledge =head2 Migrate t/ from custom TAP generation Many tests below F still generate TAP by "hand", rather than using library functions. As explained in L, tests in F are written in a particular way to test that more complex constructions actually work before using them routinely. Hence they don't use C, but instead there is an intentionally simpler library, F. However, quite a few tests in F have not been refactored to use it. Refactoring any of these tests, one at a time, is a useful thing TODO. The subdirectories F, F and F, that contain the most basic tests, should be excluded from this task. =head2 Automate perldelta generation The perldelta file accompanying each release summaries the major changes. It's mostly manually generated currently, but some of that could be automated with a bit of perl, specifically the generation of =over =item Modules and Pragmata =item New Documentation =item New Tests =back See F for details. =head2 Make Schwern poorer We should have tests for everything. When all the core's modules are tested, Schwern has promised to donate to $500 to TPF. We may need volunteers to hold him upside down and shake vigorously in order to actually extract the cash. =head2 Improve the coverage of the core tests Use Devel::Cover to ascertain the core modules' test coverage, then add tests that are currently missing. =head2 test B A full test suite for the B module would be nice. =head2 A decent benchmark C 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. Gisle would welcome new tests for perlbench. Steffen Schwingon would welcome help with L =head2 fix tainting bugs Fix the bugs revealed by running the test suite with the C<-t> switch (via C). =head2 Dual life everything As part of the "dists" plan, anything that doesn't belong in the smallest perl distribution needs to be dual lifed. Anything else can be too. Figure out what changes would be needed to package that module and its tests up for CPAN, and do so. Test it with older perl releases, and fix the problems you find. To make a minimal perl distribution, it's useful to look at F. =head2 POSIX memory footprint Ilya observed that use POSIX; eats memory like there's no tomorrow, and at various times worked to cut it down. There is probably still fat to cut out - for example POSIX passes Exporter some very memory hungry data structures. =head2 makedef.pl and conditional compilation The script F that generates the list of exported symbols on platforms which need this. Functions are declared in F, variables in F. Quite a few of the functions and variables are conditionally declared there, using C<#ifdef>. However, F doesn't understand the C macros, so the rules about which symbols are present when is duplicated in the Perl code. Writing things twice is bad, m'kay. It would be good to teach F<.pl> to understand the conditional compilation, and hence remove the duplication, and the mistakes it has caused. =head2 use strict; and AutoLoad Currently if you write package Whack; use AutoLoader 'AUTOLOAD'; use strict; 1; __END__ sub bloop { print join (' ', No, strict, here), "!\n"; } then C isn't in force within the autoloaded subroutines. It would be more consistent (and less surprising) to arrange for all lexical pragmas in force at the __END__ block to be in force within each autoloaded subroutine. There's a similar problem with SelfLoader. =head2 profile installman The F script is slow. All it is doing text processing, which we're told is something Perl is good at. So it would be nice to know what it is doing that is taking so much CPU, and where possible address it. =head2 enable lexical enabling/disabling of individual warnings Currently, warnings can only be enabled or disabled by category. There are times when it would be useful to quash a single warning, not a whole category. =head2 document diagnostics Many diagnostic messages are not currently documented. The list is at the end of t/porting/diag.t. =head1 Tasks that need a little sysadmin-type knowledge Or if you prefer, tasks that you would learn from, and broaden your skills base... =head2 make HTML install work There is an C target in the Makefile. It's marked as "experimental". It would be good to get this tested, make it work reliably, and remove the "experimental" tag. This would include =over 4 =item 1 Checking that cross linking between various parts of the documentation works. In particular that links work between the modules (files with POD in F) and the core documentation (files in F) =item 2 Improving the code that split C into chunks, preferably with general case code added to L that could be used elsewhere. Challenges here are correctly identifying the groups of functions that go together, and making the right named external cross-links point to the right page. Currently this works reasonably well in the general case, and correctly parses two or more C<=items> giving the different parameter lists for the same function, such used by C. However it fails completely where I functions are listed as a sequence of C<=items> but share the same description. All the functions from C to C have individual stub pages, with only the page for C holding the description common to all. Likewise C, C and C have stub pages, instead of sharing the body of C. Note also the current code isn't ideal with the two forms of C