


PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


NAME
       perltodo - Perl TO-DO List

DESCRIPTION
       This is a list of wishes for Perl.  It is maintained by
       Nathan Torkington for the Perl porters.  Send updates to
       perl5-porters@perl.org.  If you want to work on any of
       these projects, be sure to check the perl5-porters
       archives for past ideas, flames, and propaganda.  This
       will save you time and also prevent you from implementing
       something that Larry has already vetoed.  One set of
       archives may be found at:

           http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/


Infrastructure
       Mailing list archives

       Chaim suggests contacting egroup and asking them to
       archive the other perl.org mailing lists.  Probably not
       advocacy, but definitely perl6-porters, etc.

       Bug tracking system

       Richard Foley richard@perl.org is writing one.  We looked
       at several, like gnats and the Debian system, but at the
       time we investigated them, none met our needs.  Since
       then, Jitterbug has matured, and may be worth reinvestiga-
       tion.

       The system we've developed is the recipient of perlbug
       mail, and any followups it generates from perl5-porters.
       New bugs are entered into a mysql database, and sent on to
       perl5-porters with the subject line rewritten to include a
       "ticket number" (unique ID for the new bug).  If the
       incoming message already had a ticket number in the sub-
       ject line, then the message is logged against that bug.
       There is a separate email interface (not forwarding to
       p5p) that permits porters to claim, categorize, and close
       tickets.

       There is also a web interface to the system at
       http://bugs.perl.org.

       The current delay in implementation is caused by perl.org
       lockups.  One suspect is the mail handling system, possi-
       bly going into loops.

       We still desperately need a bugmaster, someone who will
       look at every new "bug" and kill those that we already
       know about, those that are not bugs at all, etc.





2001-05-24                 perl v5.6.1                          1





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Regression Tests

       The test suite for Perl serves two needs: ensuring fea-
       tures work, and ensuring old bugs have not been reintro-
       duced.  Both need work.

       Brent LaVelle (lavelle@metronet.com) has stepped forward
       to work on performance tests and improving the size of the
       test suite.

       Coverage
           Do the tests that come with Perl exercise every line
           (or every block, or ...)  of the Perl interpreter, and
           if not then how can we make them do so?

       Regression
           No bug fixes should be made without a corresponding
           testsuite addition.  This needs a dedicated enforcer,
           as the current pumpking is either too lazy or too
           stupid or both and lets enforcement wander all over
           the map.  :-)

       __DIE__
           Tests that fail need to be of a form that can be read-
           ily mailed to perlbug and diagnosed with minimal back-
           and-forth's to determine which test failed, due to
           what cause, etc.

       suidperl
           We need regression/sanity tests for suidperl

       The 25% slowdown from perl4 to perl5
           This value may or may not be accurate, but it cer-
           tainly is eye-catching.  For some things perl5 is
           faster than perl4, but often the reliability and
           extensibility have come at a cost of speed.  The
           benchmark suite that Gisle released earlier has been
           hailed as both a fantastic solution and as a source of
           entirely meaningless figures.  Do we need to test
           "real applications"?  Can you do so?  Anyone have
           machines to dedicate to the task?  Identify the things
           that have grown slower, and see if there's a way to
           make them faster.

Configure
       Andy Dougherty maintain(ed|s) a list of "todo" items for
       the configure that comes with Perl.  See Porting/pump-
       kin.pod in the latest source release.

       Install HTML

       Have "make install" give you the option to install HTML as
       well.  This would be part of Configure.  Andy Wardley
       (certified Perl studmuffin) will look into the current



2001-05-24                 perl v5.6.1                          2





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       problems of HTML installation--is 'installhtml' preventing
       this from happening cleanly, or is pod2html the problem?
       If the latter, Brad Appleton's pod work may fix the prob-
       lem for free.

Perl Language
       64-bit Perl

       Verify complete 64 bit support so that the value of
       sysseek, or "-s", or stat(), or tell can fit into a perl
       number without losing precision.  Work with the perl-64bit
       mailing list on perl.org.

       Prototypes


       Named prototypes
           Add proper named prototypes that actually work use-
           fully.

       Indirect objects
           Fix prototype bug that forgets indirect objects.

       Method calls
           Prototypes for method calls.

       Context
           Return context prototype declarations.

       Scoped subs
           lexically-scoped subs, e.g. my sub

Perl Internals
       magic_setisa

       "magic_setisa" should be made to update %FIELDS [???]

       Garbage Collection

       There was talk of a mark-and-sweep garbage collector at
       TPC2, but the (to users) unpredictable nature of its
       behaviour put some off.  Sarathy, I believe, did the work.
       Here's what he has to say:

       Yeah, I hope to implement it someday too.  The points that
       were raised in TPC2 were all to do with calling DESTROY()
       methods, but I think we can accommodate that by extending
       bless() to stash extra information for objects so we track
       their lifetime accurately for those that want their
       DESTROY() to be predictable (this will be a speed hit,
       naturally, and will therefore be optional, naturally. :)

       [N.B. Don't even ask me about this now!  When I have the
       time to write a cogent summary, I'll post it.]



2001-05-24                 perl v5.6.1                          3





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Reliable signals

       Sarathy and Dan Sugalski are working on this.  Chip posted
       a patch earlier, but it was not accepted into 5.005.  The
       issue is tricky, because it has the potential to greatly
       slow down the core.

       There are at least three things to consider:

       Alternate runops() for signal despatch
           Sarathy and Dan are discussed this on perl5-porters.

       Figure out how to die() in delayed sighandler
       Add tests for Thread::Signal
       Automatic tests against CPAN
           Is there some way to automatically build all/most of
           CPAN with the new Perl and check that the modules
           there pass all the tests?

       Interpolated regex performance bugs

         while (<>) {
           $found = 0;
           foreach $pat (@patterns) {
             $found++ if /$pat/o;
           }
           print if $found;
         }

       The qr// syntax added in 5.005 has solved this problem,
       but it needs more thorough documentation.

       Memory leaks from failed eval/regcomp

       The only known memory leaks in Perl are in failed code or
       regexp compilation.  Fix this.  Hugo Van Der Sanden will
       attempt this but won't have tuits until January 1999.

       Make XS easier to use

       There was interest in SWIG from porters, but nothing has
       happened lately.

       Make embedded Perl easier to use

       This is probably difficult for the same reasons that "XS
       For Dummies" will be difficult.

       Namespace cleanup

           CPP-space:    restrict CPP symbols exported from headers
           header-space: move into CORE/perl/
           API-space:    begin list of things that constitute public api
           env-space:    Configure should use PERL_CONFIG instead of CONFIG etc.



2001-05-24                 perl v5.6.1                          4





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       MULTIPLICITY

       Complete work on safe recursive interpreters
       "Perl->new()".  Sarathy says that a reference implementa-
       tion exists.

       MacPerl

       Chris Nandor and Matthias Neeracher are working on better
       integrating MacPerl into the Perl distribution.

Documentation
       There's a lot of documentation that comes with Perl.  The
       quantity of documentation makes it difficult for users to
       know which section of which manpage to read in order to
       solve their problem.  Tom Christiansen has done much of
       the documentation work in the past.

       A clear division into tutorial and reference

       Some manpages (e.g., perltoot and perlreftut) clearly set
       out to educate the reader about a subject.  Other manpages
       (e.g., perlsub) are references for which there is no tuto-
       rial, or are references with a slight tutorial bent.  If
       things are either tutorial or reference, then the reader
       knows which manpage to read to learn about a subject, and
       which manpage to read to learn all about an aspect of that
       subject.  Part of the solution to this is:

       Remove the artificial distinction between operators and
       functions

       History shows us that users, and often porters, aren't
       clear on the operator-function distinction.  The present
       split in reference material between perlfunc and perlop
       hinders user navigation.  Given that perlfunc is by far
       the larger of the two, move operator reference into perl-
       func.

       More tutorials

       More documents of a tutorial nature could help.  Here are
       some candidates:

       Regular expressions
           Robin Berjon (r.berjon@ltconsulting.net) has volun-
           teered.

       I/O Mark-Jason Dominus (mjd@plover.com) has an outline for
           perliotut.

       pack/unpack
           This is badly needed.  There has been some discussion
           on the subject on perl5-porters.



2001-05-24                 perl v5.6.1                          5





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Debugging
           Ronald Kimball (rjk@linguist.dartmouth.edu) has volun-
           teered.

       Include a search tool

       perldoc should be able to 'grep' fulltext indices of
       installed POD files.  This would let people say:

         perldoc -find printing numbers with commas

       and get back the perlfaq entry on 'commify'.

       This solution, however, requires documentation to contain
       the keywords the user is searching for.  Even when the
       users know what they're looking for, often they can't
       spell it.

       Include a locate tool

       perldoc should be able to help people find the manpages on
       a particular high-level subject:

         perldoc -find web

       would tell them manpages, web pages, and books with mate-
       rial on web programming.  Similarly "perldoc -find
       databases", "perldoc -find references" and so on.

       We need something in the vicinity of:

         % perl -help random stuff
         No documentation for perl function `random stuff' found
         The following entry in perlfunc.pod matches /random/a:
           =item rand EXPR

           =item rand

           Returns a random fractional number greater than or equal to C<0> and less
           than the value of EXPR.  (EXPR should be positive.)  If EXPR is
           omitted, the value C<1> is used.  Automatically calls C<srand()> unless
           C<srand()> has already been called.  See also C<srand()>.















2001-05-24                 perl v5.6.1                          6





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


           (Note: If your rand function consistently returns numbers that are too
           large or too small, then your version of Perl was probably compiled
           with the wrong number of RANDBITS.)
         The following pod pages seem to have /stuff/a:
           perlfunc.pod        (7 hits)
           perlfaq7.pod        (6 hits)
           perlmod.pod         (4 hits)
           perlsyn.pod         (3 hits)
           perlfaq8.pod        (2 hits)
           perlipc.pod         (2 hits)
           perl5004delta.pod   (1 hit)
           perl5005delta.pod   (1 hit)
           perlcall.pod        (1 hit)
           perldelta.pod       (1 hit)
           perlfaq3.pod        (1 hit)
           perlfaq5.pod        (1 hit)
           perlhist.pod        (1 hit)
           perlref.pod         (1 hit)
           perltoc.pod         (1 hit)
           perltrap.pod        (1 hit)
         Proceed to open perlfunc.pod? [y] n
         Do you want to speak perl interactively? [y] n
         Should I dial 911? [y] n
         Do you need psychiatric help? [y] y
         <PELIZA> Hi, what bothers you today?
                  A Python programmer in the next cubby is driving me nuts!
         <PELIZA> Hmm, thats fixable.  Just [rest censored]


       Separate function manpages by default

       Perl should install 'manpages' for every function/operator
       into the 3pl or 3p manual section.  By default.  The
       splitman program in the Perl source distribution does the
       work of turning big perlfunc into little 3p pages.

       Users can't find the manpages

       Make "perldoc" tell users what they need to add to their
       .login or .cshrc to set their MANPATH correctly.

       Install ALL Documentation

       Make the standard documentation kit include the VMS, OS/2,
       Win32, Threads, etc information.  installperl and
       pod/Makefile should know enough to copy README.foo to
       perlfoo.pod before building everything, when appropriate.

       Outstanding issues to be documented

       Tom has a list of 5.005_5* features or changes that
       require documentation.

       Create one document that coherently explains the delta



2001-05-24                 perl v5.6.1                          7





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       between the last camel release and the current release.
       perldelta was supposed to be that, but no longer.  The
       things in perldelta never seemed to get placed in the
       right places in the real manpages, either.  This needs
       work.

       Adapt www.linuxhq.com for Perl

       This should help glorify documentation and get more people
       involved in perl development.

       Replace man with a perl program

       Can we reimplement man in Perl?  Tom has a start.  I
       believe some of the Linux systems distribute a manalike.
       Alternatively, build on perldoc to remove the unfeatures
       like "is slow" and "has no apropos".

       Unicode tutorial

       We could use more work on helping people understand Perl's
       new Unicode support that Larry has created.

Modules
       Update the POSIX extension to conform with the POSIX
       1003.1 Edition 2

       The current state of the POSIX extension is as of Edition
       1, 1991, whereas the Edition 2 came out in 1996.  ISO/IEC
       9945:1-1996(E), ANSI/IEEE Std 1003.1, 1996 Edition. ISBN
       1-55937-573-6.  The updates were legion: threads, IPC, and
       real time extensions.

       Module versions

       Automate the checking of versions in the standard distri-
       bution so it's easy for a pumpking to check whether CPAN
       has a newer version that we should be including?

       New modules

       Which modules should be added to the standard distribu-
       tion?  This ties in with the SDK discussed on the perl-sdk
       list at perl.org.

       Profiler

       Make the profiler (Devel::DProf) part of the standard
       release, and document it well.

       Tie Modules






2001-05-24                 perl v5.6.1                          8





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       VecArray
           Implement array using vec().  Nathan Torkington has
           working code to do this.

       SubstrArray
           Implement array using substr()

       VirtualArray
           Implement array using a file

       ShiftSplice
           Defines shift et al in terms of splice method

       Procedural options

       Support procedural interfaces for the common cases of
       Perl's gratuitously OOO modules.  Tom objects to "use
       IO::File" reading many thousands of lines of code.

       RPC

       Write a module for transparent, portable remote procedure
       calls.  (Not core).  This touches on the CORBA and ILU
       work.

       y2k localtime/gmtime

       Write a module, Y2k::Catch, which overloads localtime and
       gmtime's returned year value and catches "bad" attempts to
       use it.

       Export File::Find variables

       Make File::Find export "$name" etc manually, at least if
       asked to.

       Ioctl

       Finish a proper Ioctl module.

       Debugger attach/detach

       Permit a user to debug an already-running program.

       Regular Expression debugger

       Create a visual profiler/debugger tool that stepped you
       through the execution of a regular expression point by
       point.  Ilya has a module to color-code and display regu-
       lar expression parses and executions.  There's something
       at http://tkworld.org/ that might be a good start, it's a
       Tk/Tcl RE wizard, that builds regexen of many flavours.





2001-05-24                 perl v5.6.1                          9





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Alternative RE Syntax

       Make an alternative regular expression syntax that is
       accessed through a module.  For instance,

         use RE;
         $re = start_of_line()
             ->literal("1998/10/08")
             ->optional( whitespace() )
             ->literal("[")
             ->remember( many( or( "-", digit() ) ) );

         if (/$re/) {
           print "time is $1\n";
         }

       Newbies to regular expressions typically only use a subset
       of the full language.  Perhaps you wouldn't have to imple-
       ment the full feature set.

       Bundled modules

       Nicholas Clark (nick@flirble.org) had a patch for storing
       modules in zipped format.  This needs exploring and con-
       cluding.

       Expect

       Adopt IO::Tty, make it as portable as Don Libes' "expect"
       (can we link against expect code?), and perfect a Perl
       version of expect.  IO::Tty and expect could then be dis-
       tributed as part of the core distribution, replacing
       Comm.pl and other hacks.

       GUI::Native

       A simple-to-use interface to native graphical abilities
       would be welcomed.  Oh, Perl's access Tk is nice enough,
       and reasonably portable, but it's not particularly as fast
       as one would like.  Simple access to the mouse's cut
       buffer or mouse-presses shouldn't required loading a few
       terabytes of Tk code.

       Update semibroken auxiliary tools; h2ph, a2p, etc.

       Kurt Starsinic is working on h2ph.  mjd has fixed bugs in
       a2p in the past.  a2p apparently doesn't work on nawk and
       gawk extensions.  Graham Barr has an Include module that
       does h2ph work at runtime.

       pod2html

       A short-term fix: pod2html generates absolute HTML links.
       Make it generate relative links.



2001-05-24                 perl v5.6.1                         10





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Podchecker

       Something like lint for Pod would be good.  Something that
       catches common errors as well as gross ones.  Brad Apple-
       ton is putting together something as part of his PodParser
       work.

Tom's Wishes
       Webperl

       Design a webperl environment that's as tightly integrated
       and as easy-to-use as Perl's current command-line environ-
       ment.

       Mobile agents

       More work on a safe and secure execution environment for
       mobile agents would be neat; the Safe.pm module is a
       start, but there's a still a lot to be done in that area.
       Adopt Penguin?

       POSIX on non-POSIX

       Standard programming constructs for non-POSIX systems
       would help a lot of programmers stuck on primitive, legacy
       systems.  For example, Microsoft still hasn't made a
       usable POSIX interface on their clunky systems, which
       means that standard operations such as alarm() and fork(),
       both critical for sophisticated client-server programming,
       must both be kludged around.

       I'm unsure whether Tom means to emulate alarm( )and
       fork(), or merely to provide a document like perlport.pod
       to say which features are portable and which are not.

       Portable installations

       Figure out a portable semi-gelled installation, that is,
       one without full paths.  Larry has said that he's thinking
       about this.  Ilya pointed out that perllib_mangle() is
       good for this.

Win32 Stuff
       Rename new headers to be consistent with the rest


       Sort out the spawnvp() mess


       Work out DLL versioning







2001-05-24                 perl v5.6.1                         11





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Style-check


Would be nice to have
       ""pack ""(stuff)*""""
       Contiguous bitfields in pack/unpack
       lexperl
       Bundled perl preprocessor
       Use posix calls internally where possible
       format BOTTOM
       -i rename file only when successfully changed
       All ARGV input should act like <>
       report HANDLE [formats].
       support in perlmain to rerun debugger
       lvalue functions
           Tuomas Lukka, on behalf of the PDL project, greatly
           desires this and Ilya has a patch for it (probably
           against an older version of Perl).  Tuomas points out
           that what PDL really wants is lvalue methods, not just
           subs.

Possible pragmas
       (use less memory, CPU)

Optimizations
       constant function cache


       foreach(reverse...)


       Cache eval tree

       Unless lexical outer scope used (mark in &compiling?).

       rcatmaybe


       Shrink opcode tables

       Via multiple implementations selected in peep.

       Cache hash value

       Not a win, according to Guido.

       Optimize away @_ where possible


       Optimize sort by { $a <=> $b }

       Greg Bacon added several more sort optimizations.  These
       have made it into 5.005_55, thanks to Hans Mulder.




2001-05-24                 perl v5.6.1                         12





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Rewrite regexp parser for better integrated optimization

       The regexp parser was rewritten for 5.005.  Ilya's the
       regexp guru.

Vague possibilities
       ref function in list context
           This seems impossible to do without substantially
           breaking code.

       make tr/// return histogram in list context?
       Loop control on do{} et al
       Explicit switch statements
           Nobody has yet managed to come up with a switch syntax
           that would allow for mixed hash, constant, regexp
           checks.  Submit implementation with syntax, please.

       compile to real threaded code
       structured types
       Modifiable $1 et al
           The intent is for this to be a means of editing the
           matched portions of the target string.

To Do Or Not To Do
       These are things that have been discussed in the past and
       roundly criticized for being of questionable value.

       Making my() work on "package" variables

       Being able to say my($Foo::Bar), something that sounds
       ludicrous and the 5.6 pumpking has mocked.

       "or" testing defined not truth

       We tell people that "||" can be used to give a default
       value to a variable:

           $children = shift || 5;             # default is 5 children

       which is almost (but not):

           $children = shift;
           $children = 5 unless $children;

       but if the first argument was given and is "0", then it
       will be considered false by "||" and "5" used instead.
       Really we want an "||"-like operator that behaves like:

           $children = shift;
           $children = 5 unless defined $children;

       Namely, a "||" that tests defined-ness rather than truth.
       One was discussed, and a patch submitted, but the objec-
       tions were many.  While there were objections, many still



2001-05-24                 perl v5.6.1                         13





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       feel the need.  At least it was decided that "??" is the
       best name for the operator.

       "dynamic" lexicals

         my $x;
         sub foo {
           local $x;
         }

       Localizing, as Tim Bunce points out, is a separate concept
       from whether the variable is global or lexical.  Chip
       Salzenberg had an implementation once, but Larry thought
       it had potential to confuse.

       "class"-based, rather than package-based "lexicals"

       This is like what the Alias module provides, but the vari-
       ables would be lexicals reserved by perl at compile-time,
       which really are indices pointing into the pseudo-hash
       object visible inside every method so declared.

Threading
       Modules

       Which of the standard modules are thread-safe?  Which CPAN
       modules?  How easy is it to fix those non-safe modules?

       Testing

       Threading is still experimental.  Every reproducible bug
       identifies something else for us to fix.  Find and submit
       more of these problems.

       $AUTOLOAD


       exit/die

       Consistent semantics for exit/die in threads.

       External threads

       Better support for externally created threads.

       Thread::Pool


       thread-safety

       Spot-check globals like statcache and global GVs for
       thread-safety.  "Part done", says Sarathy.





2001-05-24                 perl v5.6.1                         14





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Per-thread GVs

       According to Sarathy, this would make @_ be the same in
       threaded and non-threaded, as well as helping solve prob-
       lems like filehandles (the same filehandle currently can-
       not be used in two threads).

Compiler
       Optimization

       The compiler's back-end code-generators for creating byte-
       code or compilable C code could use optimization work.

       Byteperl

       Figure out how and where byteperl will be built for the
       various platforms.

       Precompiled modules

       Save byte-compiled modules on disk.

       Executables

       Auto-produce executable.

       Typed lexicals

       Typed lexicals should affect B::CC::load_pad.

       Win32

       Workarounds to help Win32 dynamic loading.

       END blocks

       END blocks need saving in compiled output, now that CHECK
       blocks are available.

       _AUTOLOAD

       _AUTOLOAD prodding.

       comppadlist

       Fix comppadlist (names in comppad_name can have fake SvCUR
       from where newASSIGNOP steals the field).

       Cached compilation

       Can we install modules as bytecode?

Recently Finished Tasks




2001-05-24                 perl v5.6.1                         15





PERLTODO(1)      Perl Programmers Reference Guide     PERLTODO(1)


       Figure a way out of $^(capital letter)

       Figure out a clean way to extend $^(capital letter) beyond
       the 26 alphabets.  (${^WORD} maybe?)

       Mark-Jason Dominus sent a patch which went into 5.005_56.

       Filenames

       Keep filenames in the distribution and in the standard
       module set be 8.3 friendly where feasible.  Good luck
       changing the standard modules, though.

       Foreign lines

       Perl should be more generous in accepting foreign line
       terminations.  Mostly done in 5.005.

       Namespace cleanup

           symbol-space: "pl_" prefix for all global vars
                         "Perl_" prefix for all functions

           CPP-space:    stop malloc()/free() pollution unless asked


       ISA.pm

       Rename and alter ISA.pm.  Done.  It is now base.pm.

       gettimeofday

       See Time::HiRes.

       autocroak?

       This is the Fatal.pm module, so any builtin that does not
       return success automatically die()s.  If you're feeling
       brave, tie this in with the unified exceptions scheme.


















2001-05-24                 perl v5.6.1                         16


