1*0Sstevel@tonic-gate=head1 NAME 2*0Sstevel@tonic-gate 3*0Sstevel@tonic-gateperltodo - Perl TO-DO List 4*0Sstevel@tonic-gate 5*0Sstevel@tonic-gate=head1 DESCRIPTION 6*0Sstevel@tonic-gate 7*0Sstevel@tonic-gateThis is a list of wishes for Perl. Send updates to 8*0Sstevel@tonic-gateI<perl5-porters@perl.org>. If you want to work on any of these 9*0Sstevel@tonic-gateprojects, be sure to check the perl5-porters archives for past ideas, 10*0Sstevel@tonic-gateflames, and propaganda. This will save you time and also prevent you 11*0Sstevel@tonic-gatefrom implementing something that Larry has already vetoed. One set 12*0Sstevel@tonic-gateof archives may be found at: 13*0Sstevel@tonic-gate 14*0Sstevel@tonic-gate http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ 15*0Sstevel@tonic-gate 16*0Sstevel@tonic-gate=head1 To do during 5.6.x 17*0Sstevel@tonic-gate 18*0Sstevel@tonic-gate=head2 Support for I/O disciplines 19*0Sstevel@tonic-gate 20*0Sstevel@tonic-gateC<perlio> provides this, but the interface could be a lot more 21*0Sstevel@tonic-gatestraightforward. 22*0Sstevel@tonic-gate 23*0Sstevel@tonic-gate=head2 Autoload bytes.pm 24*0Sstevel@tonic-gate 25*0Sstevel@tonic-gateWhen the lexer sees, for instance, C<bytes::length>, it should 26*0Sstevel@tonic-gateautomatically load the C<bytes> pragma. 27*0Sstevel@tonic-gate 28*0Sstevel@tonic-gate=head2 Make "\u{XXXX}" et al work 29*0Sstevel@tonic-gate 30*0Sstevel@tonic-gateDanger, Will Robinson! Discussing the semantics of C<"\x{F00}">, 31*0Sstevel@tonic-gateC<"\xF00"> and C<"\U{F00}"> on P5P I<will> lead to a long and boring 32*0Sstevel@tonic-gateflamewar. 33*0Sstevel@tonic-gate 34*0Sstevel@tonic-gate=head2 Create a char *sv_pvprintify(sv, STRLEN *lenp, UV flags) 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gateFor displaying PVs with control characters, embedded nulls, and Unicode. 37*0Sstevel@tonic-gateThis would be useful for printing warnings, or data and regex dumping, 38*0Sstevel@tonic-gatenot_a_number(), and so on. 39*0Sstevel@tonic-gate 40*0Sstevel@tonic-gateRequirements: should handle both byte and UTF-8 strings. isPRINT() 41*0Sstevel@tonic-gatecharacters printed as-is, character less than 256 as \xHH, Unicode 42*0Sstevel@tonic-gatecharacters as \x{HHH}. Don't assume ASCII-like, either, get somebody 43*0Sstevel@tonic-gateon EBCDIC to test the output. 44*0Sstevel@tonic-gate 45*0Sstevel@tonic-gatePossible options, controlled by the flags: 46*0Sstevel@tonic-gate- whitespace (other than ' ' of isPRINT()) printed as-is 47*0Sstevel@tonic-gate- use isPRINT_LC() instead of isPRINT() 48*0Sstevel@tonic-gate- print control characters like this: "\cA" 49*0Sstevel@tonic-gate- print control characters like this: "^A" 50*0Sstevel@tonic-gate- non-PRINTables printed as '.' instead of \xHH 51*0Sstevel@tonic-gate- use \OOO instead of \xHH 52*0Sstevel@tonic-gate- use the C/Perl-metacharacters like \n, \t 53*0Sstevel@tonic-gate- have a maximum length for the produced string (read it from *lenp) 54*0Sstevel@tonic-gate- append a "..." to the produced string if the maximum length is exceeded 55*0Sstevel@tonic-gate- really fancy: print unicode characters as \N{...} 56*0Sstevel@tonic-gate 57*0Sstevel@tonic-gateNOTE: pv_display(), pv_uni_display(), sv_uni_display() are already 58*0Sstevel@tonic-gatedoing something like the above. 59*0Sstevel@tonic-gate 60*0Sstevel@tonic-gate=head2 Overloadable regex assertions 61*0Sstevel@tonic-gate 62*0Sstevel@tonic-gateThis may or may not be possible with the current regular expression 63*0Sstevel@tonic-gateengine. The idea is that, for instance, C<\b> needs to be 64*0Sstevel@tonic-gatealgorithmically computed if you're dealing with Thai text. Hence, the 65*0Sstevel@tonic-gateB<\b> assertion wants to be overloaded by a function. 66*0Sstevel@tonic-gate 67*0Sstevel@tonic-gate=head2 Unicode 68*0Sstevel@tonic-gate 69*0Sstevel@tonic-gate=over 4 70*0Sstevel@tonic-gate 71*0Sstevel@tonic-gate=item * 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gateAllow for long form of the General Category Properties, e.g 74*0Sstevel@tonic-gateC<\p{IsOpenPunctuation}>, not just the abbreviated form, e.g. 75*0Sstevel@tonic-gateC<\p{IsPs}>. 76*0Sstevel@tonic-gate 77*0Sstevel@tonic-gate=item * 78*0Sstevel@tonic-gate 79*0Sstevel@tonic-gateAllow for the metaproperties: C<XID Start>, C<XID Continue>, 80*0Sstevel@tonic-gateC<NF*_NO>, C<NF*_MAYBE> (require the DerivedCoreProperties and 81*0Sstevel@tonic-gateDerviceNormalizationProperties files). 82*0Sstevel@tonic-gate 83*0Sstevel@tonic-gateThere are also multiple value properties still unimplemented: 84*0Sstevel@tonic-gateC<Numeric Type>, C<East Asian Width>. 85*0Sstevel@tonic-gate 86*0Sstevel@tonic-gate=item * 87*0Sstevel@tonic-gate 88*0Sstevel@tonic-gate Case Mappings? http://www.unicode.org/unicode/reports/tr21/ 89*0Sstevel@tonic-gate 90*0Sstevel@tonic-gateMostly implemented (all of 1:1, 1:N, N:1), only the "final sigma" 91*0Sstevel@tonic-gateand locale-specific rules of SpecCase are not implemented. 92*0Sstevel@tonic-gate 93*0Sstevel@tonic-gate=item * 94*0Sstevel@tonic-gate 95*0Sstevel@tonic-gateUTF-8 identifier names should probably be canonicalized: NFC? 96*0Sstevel@tonic-gate 97*0Sstevel@tonic-gate=item * 98*0Sstevel@tonic-gate 99*0Sstevel@tonic-gateUTF-8 in package names and sub names? The first is problematic 100*0Sstevel@tonic-gatebecause of the mapping to pathnames, ditto for the second one if 101*0Sstevel@tonic-gateone does autosplitting, for example. Some of this works already 102*0Sstevel@tonic-gatein 5.8.0, but essentially it is unsupported. Constructs to consider, 103*0Sstevel@tonic-gateat the very least: 104*0Sstevel@tonic-gate 105*0Sstevel@tonic-gate use utf8; 106*0Sstevel@tonic-gate package UnicodePackage; 107*0Sstevel@tonic-gate sub new { bless {}, shift }; 108*0Sstevel@tonic-gate sub UnicodeMethod1 { ... $_[0]->UnicodeMethod2(...) ... } 109*0Sstevel@tonic-gate sub UnicodeMethod2 { ... } # in here caller(0) should contain Unicode 110*0Sstevel@tonic-gate ... 111*0Sstevel@tonic-gate package main; 112*0Sstevel@tonic-gate my $x = UnicodePackage->new; 113*0Sstevel@tonic-gate print ref $x, "\n"; # should be Unicode 114*0Sstevel@tonic-gate $x->UnicodeMethod1(...); 115*0Sstevel@tonic-gate my $y = UnicodeMethod3 UnicodePackage ...; 116*0Sstevel@tonic-gate 117*0Sstevel@tonic-gateIn the above all I<UnicodeXxx> contain (identifier-worthy) characters 118*0Sstevel@tonic-gatebeyond the code point 255, for example 256. Wherever package/class or 119*0Sstevel@tonic-gatesubroutine names can be returned needs to be checked for Unicodeness. 120*0Sstevel@tonic-gate 121*0Sstevel@tonic-gate=back 122*0Sstevel@tonic-gate 123*0Sstevel@tonic-gateSee L<perlunicode/UNICODE REGULAR EXPRESSION SUPPORT LEVEL> for what's 124*0Sstevel@tonic-gatethere and what's missing. Almost all of Levels 2 and 3 is missing, 125*0Sstevel@tonic-gateand as of 5.8.0 not even all of Level 1 is there. 126*0Sstevel@tonic-gateThey have some tricks Perl doesn't yet implement, such as character 127*0Sstevel@tonic-gateclass subtraction. 128*0Sstevel@tonic-gate 129*0Sstevel@tonic-gate http://www.unicode.org/unicode/reports/tr18/ 130*0Sstevel@tonic-gate 131*0Sstevel@tonic-gate=head2 Work out exit/die semantics for threads 132*0Sstevel@tonic-gate 133*0Sstevel@tonic-gateThere are some suggestions to use for example something like this: 134*0Sstevel@tonic-gatedefault to "(thread exiting first will) wait for the other threads 135*0Sstevel@tonic-gateuntil up to 60 seconds". Other possibilities: 136*0Sstevel@tonic-gate 137*0Sstevel@tonic-gate use threads wait => 0; 138*0Sstevel@tonic-gate 139*0Sstevel@tonic-gateDo not wait. 140*0Sstevel@tonic-gate 141*0Sstevel@tonic-gate use threads wait_for => 10; 142*0Sstevel@tonic-gate 143*0Sstevel@tonic-gateWait up to 10 seconds. 144*0Sstevel@tonic-gate 145*0Sstevel@tonic-gate use threads wait_for => -1; 146*0Sstevel@tonic-gate 147*0Sstevel@tonic-gateWait for ever. 148*0Sstevel@tonic-gate 149*0Sstevel@tonic-gatehttp://archive.develooper.com/perl5-porters@perl.org/msg79618.html 150*0Sstevel@tonic-gate 151*0Sstevel@tonic-gate=head2 Better support for nonpreemptive threading systems like GNU pth 152*0Sstevel@tonic-gate 153*0Sstevel@tonic-gateTo better support nonpreemptive threading systems, perhaps some of the 154*0Sstevel@tonic-gateblocking functions internally in Perl should do a yield() before a 155*0Sstevel@tonic-gateblocking call. (Now certain threads tests ({basic,list,thread.t}) 156*0Sstevel@tonic-gatesimply do a yield() before they sleep() to give nonpreemptive thread 157*0Sstevel@tonic-gateimplementations a chance). 158*0Sstevel@tonic-gate 159*0Sstevel@tonic-gateIn some cases, like the GNU pth, which has replacement functions that 160*0Sstevel@tonic-gateare nonblocking (pth_select instead of select), maybe Perl should be 161*0Sstevel@tonic-gateusing them instead when built for threading. 162*0Sstevel@tonic-gate 163*0Sstevel@tonic-gate=head2 Typed lexicals for compiler 164*0Sstevel@tonic-gate 165*0Sstevel@tonic-gate=head2 Compiler workarounds for Win32 166*0Sstevel@tonic-gate 167*0Sstevel@tonic-gate=head2 AUTOLOADing in the compiler 168*0Sstevel@tonic-gate 169*0Sstevel@tonic-gate=head2 Fixing comppadlist when compiling 170*0Sstevel@tonic-gate 171*0Sstevel@tonic-gate=head2 Cleaning up exported namespace 172*0Sstevel@tonic-gate 173*0Sstevel@tonic-gate=head2 Complete signal handling 174*0Sstevel@tonic-gate 175*0Sstevel@tonic-gateAdd C<PERL_ASYNC_CHECK> to opcodes which loop; replace C<sigsetjmp> with 176*0Sstevel@tonic-gateC<sigjmp>; check C<wait> for signal safety. 177*0Sstevel@tonic-gate 178*0Sstevel@tonic-gate=head2 Out-of-source builds 179*0Sstevel@tonic-gate 180*0Sstevel@tonic-gateThis was done for 5.6.0, but needs reworking for 5.7.x 181*0Sstevel@tonic-gate 182*0Sstevel@tonic-gate=head2 POSIX realtime support 183*0Sstevel@tonic-gate 184*0Sstevel@tonic-gatePOSIX 1003.1 1996 Edition support--realtime stuff: POSIX semaphores, 185*0Sstevel@tonic-gatemessage queues, shared memory, realtime clocks, timers, signals (the 186*0Sstevel@tonic-gatemetaconfig units mostly already exist for these) 187*0Sstevel@tonic-gate 188*0Sstevel@tonic-gate=head2 UNIX98 support 189*0Sstevel@tonic-gate 190*0Sstevel@tonic-gateReader-writer locks, realtime/asynchronous IO 191*0Sstevel@tonic-gate 192*0Sstevel@tonic-gate=head2 IPv6 Support 193*0Sstevel@tonic-gate 194*0Sstevel@tonic-gateThere are non-core modules, such as C<Socket6>, but these will need 195*0Sstevel@tonic-gateintegrating when IPv6 actually starts to really happen. See RFC 2292 196*0Sstevel@tonic-gateand RFC 2553. 197*0Sstevel@tonic-gate 198*0Sstevel@tonic-gate=head2 Long double conversion 199*0Sstevel@tonic-gate 200*0Sstevel@tonic-gateFloating point formatting is still causing some weird test failures. 201*0Sstevel@tonic-gate 202*0Sstevel@tonic-gate=head2 Locales 203*0Sstevel@tonic-gate 204*0Sstevel@tonic-gateLocales and Unicode interact with each other in unpleasant ways. 205*0Sstevel@tonic-gateOne possible solution would be to adopt/support ICU: 206*0Sstevel@tonic-gate 207*0Sstevel@tonic-gate http://oss.software.ibm.com/icu/index.html 208*0Sstevel@tonic-gate 209*0Sstevel@tonic-gate=head2 Arithmetic on non-Arabic numerals 210*0Sstevel@tonic-gate 211*0Sstevel@tonic-gateC<[1234567890]> aren't the only numerals any more. 212*0Sstevel@tonic-gate 213*0Sstevel@tonic-gate=head2 POSIX Unicode character classes 214*0Sstevel@tonic-gate 215*0Sstevel@tonic-gate(C<[=a=]> for equivalence classes, C<[.ch.]> for collation.) 216*0Sstevel@tonic-gateThese are dependent on Unicode normalization and collation. 217*0Sstevel@tonic-gate 218*0Sstevel@tonic-gate=head2 Factoring out common suffices/prefices in regexps (trie optimization) 219*0Sstevel@tonic-gate 220*0Sstevel@tonic-gateCurrently, the user has to optimize C<foo|far> and C<foo|goo> into 221*0Sstevel@tonic-gateC<f(?:oo|ar)> and C<[fg]oo> by hand; this could be done automatically. 222*0Sstevel@tonic-gate 223*0Sstevel@tonic-gate=head2 Security audit shipped utilities 224*0Sstevel@tonic-gate 225*0Sstevel@tonic-gateAll the code we ship with Perl needs to be sensible about temporary file 226*0Sstevel@tonic-gatehandling, locking, input validation, and so on. 227*0Sstevel@tonic-gate 228*0Sstevel@tonic-gate=head2 Sort out the uid-setting mess 229*0Sstevel@tonic-gate 230*0Sstevel@tonic-gateCurrently there are several problems with the setting of uids ($<, $> 231*0Sstevel@tonic-gatefor the real and effective uids). Firstly, what exactly setuid() call 232*0Sstevel@tonic-gategets invoked in which platform is simply a big mess that needs to be 233*0Sstevel@tonic-gateuntangled. Secondly, the effects are apparently not standard across 234*0Sstevel@tonic-gateplatforms, (if you first set $< and then $>, or vice versa, being 235*0Sstevel@tonic-gateuid == euid == zero, or just euid == zero, or as a normal user, what are 236*0Sstevel@tonic-gatethe results?). The test suite not (usually) being run as root means 237*0Sstevel@tonic-gatethat these things do not get much testing. Thirdly, there's quite 238*0Sstevel@tonic-gateoften a third uid called saved uid, and Perl has no knowledge of that 239*0Sstevel@tonic-gatefeature in any way. (If one has the saved uid of zero, one can get 240*0Sstevel@tonic-gateback any real and effective uids.) As an example, to change also the 241*0Sstevel@tonic-gatesaved uid, one needs to set the real and effective uids B<twice>-- in 242*0Sstevel@tonic-gatemost systems, that is: in HP-UX that doesn't seem to work. 243*0Sstevel@tonic-gate 244*0Sstevel@tonic-gate=head2 Custom opcodes 245*0Sstevel@tonic-gate 246*0Sstevel@tonic-gateHave a way to introduce user-defined opcodes without the subroutine call 247*0Sstevel@tonic-gateoverhead of an XSUB; the user should be able to create PP code. Simon 248*0Sstevel@tonic-gateCozens has some ideas on this. 249*0Sstevel@tonic-gate 250*0Sstevel@tonic-gate=head2 DLL Versioning 251*0Sstevel@tonic-gate 252*0Sstevel@tonic-gateWindows needs a way to know what version of an XS or C<libperl> DLL it's 253*0Sstevel@tonic-gateloading. 254*0Sstevel@tonic-gate 255*0Sstevel@tonic-gate=head2 Introduce @( and @) 256*0Sstevel@tonic-gate 257*0Sstevel@tonic-gateC<$(> may return "foo bar baz". Unfortunately, since groups can 258*0Sstevel@tonic-gatetheoretically have spaces in their names, this could be one, two or 259*0Sstevel@tonic-gatethree groups. 260*0Sstevel@tonic-gate 261*0Sstevel@tonic-gate=head2 Floating point handling 262*0Sstevel@tonic-gate 263*0Sstevel@tonic-gateC<NaN> and C<inf> support is particularly troublesome. 264*0Sstevel@tonic-gate(fp_classify(), fp_class(), fp_class_d(), class(), isinf(), 265*0Sstevel@tonic-gateisfinite(), finite(), isnormal(), unordered(), <ieeefp.h>, 266*0Sstevel@tonic-gate<fp_class.h> (there are metaconfig units for all these) (I think), 267*0Sstevel@tonic-gatefp_setmask(), fp_getmask(), fp_setround(), fp_getround() 268*0Sstevel@tonic-gate(no metaconfig units yet for these). Don't forget finitel(), fp_classl(), 269*0Sstevel@tonic-gatefp_class_l(), (yes, both do, unfortunately, exist), and unorderedl().) 270*0Sstevel@tonic-gate 271*0Sstevel@tonic-gateAs of Perl 5.6.1, there is a Perl macro, Perl_isnan(). 272*0Sstevel@tonic-gate 273*0Sstevel@tonic-gate=head2 IV/UV preservation 274*0Sstevel@tonic-gate 275*0Sstevel@tonic-gateNicholas Clark has done a lot of work on this, but work is continuing. 276*0Sstevel@tonic-gateC<+>, C<-> and C<*> work, but guards need to be in place for C<%>, C</>, 277*0Sstevel@tonic-gateC<&>, C<oct>, C<hex> and C<pack>. 278*0Sstevel@tonic-gate 279*0Sstevel@tonic-gate=head2 Replace pod2html with something using Pod::Parser 280*0Sstevel@tonic-gate 281*0Sstevel@tonic-gateThe CPAN module C<Marek::Pod::Html> may be a more suitable basis for a 282*0Sstevel@tonic-gateC<pod2html> converter; the current one duplicates the functionality 283*0Sstevel@tonic-gateabstracted in C<Pod::Parser>, which makes updating the POD language 284*0Sstevel@tonic-gatedifficult. 285*0Sstevel@tonic-gate 286*0Sstevel@tonic-gate=head2 Automate module testing on CPAN 287*0Sstevel@tonic-gate 288*0Sstevel@tonic-gateWhen a new Perl is being beta tested, porters have to manually grab 289*0Sstevel@tonic-gatetheir favourite CPAN modules and test them - this should be done 290*0Sstevel@tonic-gateautomatically. 291*0Sstevel@tonic-gate 292*0Sstevel@tonic-gate=head2 sendmsg and recvmsg 293*0Sstevel@tonic-gate 294*0Sstevel@tonic-gateWe have all the other BSD socket functions but these. There are 295*0Sstevel@tonic-gatemetaconfig units for these functions which can be added. To avoid these 296*0Sstevel@tonic-gatebeing new opcodes, a solution similar to the way C<sockatmark> was added 297*0Sstevel@tonic-gatewould be preferable. (Autoload the C<IO::whatever> module.) 298*0Sstevel@tonic-gate 299*0Sstevel@tonic-gate=head2 Rewrite perlre documentation 300*0Sstevel@tonic-gate 301*0Sstevel@tonic-gateThe new-style patterns need full documentation, and the whole document 302*0Sstevel@tonic-gateneeds to be a lot clearer. 303*0Sstevel@tonic-gate 304*0Sstevel@tonic-gate=head2 Convert example code to IO::Handle filehandles 305*0Sstevel@tonic-gate 306*0Sstevel@tonic-gate=head2 Document Win32 choices 307*0Sstevel@tonic-gate 308*0Sstevel@tonic-gate=head2 Check new modules 309*0Sstevel@tonic-gate 310*0Sstevel@tonic-gate=head2 Make roffitall find pods and libs itself 311*0Sstevel@tonic-gate 312*0Sstevel@tonic-gateSimon Cozens has done some work on this but it needs a rethink. 313*0Sstevel@tonic-gate 314*0Sstevel@tonic-gate=head1 To do at some point 315*0Sstevel@tonic-gate 316*0Sstevel@tonic-gateThese are ideas that have been regularly tossed around, that most 317*0Sstevel@tonic-gatepeople believe should be done maybe during 5.8.x 318*0Sstevel@tonic-gate 319*0Sstevel@tonic-gate=head2 Remove regular expression recursion 320*0Sstevel@tonic-gate 321*0Sstevel@tonic-gateBecause the regular expression engine is recursive, badly designed 322*0Sstevel@tonic-gateexpressions can lead to lots of recursion filling up the stack. Ilya 323*0Sstevel@tonic-gateclaims that it is easy to convert the engine to being iterative, but 324*0Sstevel@tonic-gatethis has still not yet been done. There may be a regular expression 325*0Sstevel@tonic-gateengine hit squad meeting at TPC5. 326*0Sstevel@tonic-gate 327*0Sstevel@tonic-gate=head2 Memory leaks after failed eval 328*0Sstevel@tonic-gate 329*0Sstevel@tonic-gatePerl will leak memory if you C<eval "hlagh hlagh hlagh hlagh">. This is 330*0Sstevel@tonic-gatepartially because it attempts to build up an op tree for that code and 331*0Sstevel@tonic-gatedoesn't properly free it. The same goes for non-syntactically-correct 332*0Sstevel@tonic-gateregular expressions. Hugo looked into this, but decided it needed a 333*0Sstevel@tonic-gatemark-and-sweep GC implementation. 334*0Sstevel@tonic-gate 335*0Sstevel@tonic-gateAlan notes that: The basic idea was to extend the parser token stack 336*0Sstevel@tonic-gate(C<YYSTYPE>) to include a type field so we knew what sort of thing each 337*0Sstevel@tonic-gateelement of the stack was. The F<perly.c> code would then have to be 338*0Sstevel@tonic-gatepostprocessed to record the type of each entry on the stack as it was 339*0Sstevel@tonic-gatecreated, and the parser patched so that it could unroll the stack 340*0Sstevel@tonic-gateproperly on error. 341*0Sstevel@tonic-gate 342*0Sstevel@tonic-gateThis is possible to do, but would be pretty messy to implement, as it 343*0Sstevel@tonic-gatewould rely on even more sed hackery in F<perly.fixer>. 344*0Sstevel@tonic-gate 345*0Sstevel@tonic-gate=head2 bitfields in pack 346*0Sstevel@tonic-gate 347*0Sstevel@tonic-gate=head2 Cross compilation 348*0Sstevel@tonic-gate 349*0Sstevel@tonic-gateMake Perl buildable with a cross-compiler. This will play havoc with 350*0Sstevel@tonic-gateConfigure, which needs to know how the target system will respond to 351*0Sstevel@tonic-gateits tests; maybe C<microperl> will be a good starting point here. 352*0Sstevel@tonic-gate(Indeed, Bart Schuller reports that he compiled up C<microperl> for 353*0Sstevel@tonic-gatethe Agenda PDA and it works fine.) A really big spanner in the works 354*0Sstevel@tonic-gateis the bootstrapping build process of Perl: if the filesystem the 355*0Sstevel@tonic-gatetarget systems sees is not the same what the build host sees, various 356*0Sstevel@tonic-gateinput, output, and (Perl) library files need to be copied back and forth. 357*0Sstevel@tonic-gate 358*0Sstevel@tonic-gateAs of 5.8.0 Configure mostly works for cross-compilation 359*0Sstevel@tonic-gate(used successfully for iPAQ Linux), miniperl gets built, 360*0Sstevel@tonic-gatebut then building DynaLoader (and other extensions) fails 361*0Sstevel@tonic-gatesince MakeMaker knows nothing of cross-compilation. 362*0Sstevel@tonic-gate(See INSTALL/Cross-compilation for the state of things.) 363*0Sstevel@tonic-gate 364*0Sstevel@tonic-gate=head2 Perl preprocessor / macros 365*0Sstevel@tonic-gate 366*0Sstevel@tonic-gateSource filters help with this, but do not get us all the way. For 367*0Sstevel@tonic-gateinstance, it should be possible to implement the C<??> operator somehow; 368*0Sstevel@tonic-gatesource filters don't (quite) cut it. 369*0Sstevel@tonic-gate 370*0Sstevel@tonic-gate=head2 Perl lexer in Perl 371*0Sstevel@tonic-gate 372*0Sstevel@tonic-gateDamian Conway is planning to work on this, but it hasn't happened yet. 373*0Sstevel@tonic-gate 374*0Sstevel@tonic-gate=head2 Using POSIX calls internally 375*0Sstevel@tonic-gate 376*0Sstevel@tonic-gateWhen faced with a BSD vs. SysV -style interface to some library or 377*0Sstevel@tonic-gatesystem function, perl's roots show in that it typically prefers the BSD 378*0Sstevel@tonic-gateinterface (but falls back to the SysV one). One example is getpgrp(). 379*0Sstevel@tonic-gateOther examples include C<memcpy> vs. C<bcopy>. There are others, mostly in 380*0Sstevel@tonic-gateF<pp_sys.c>. 381*0Sstevel@tonic-gate 382*0Sstevel@tonic-gateMostly, this item is a suggestion for which way to start a journey into 383*0Sstevel@tonic-gatean C<#ifdef> forest. It is not primarily a suggestion to eliminate any of 384*0Sstevel@tonic-gatethe C<#ifdef> forests. 385*0Sstevel@tonic-gate 386*0Sstevel@tonic-gatePOSIX calls are perhaps more likely to be portable to unexpected 387*0Sstevel@tonic-gatearchitectures. They are also perhaps more likely to be actively 388*0Sstevel@tonic-gatemaintained by a current vendor. They are also perhaps more likely to be 389*0Sstevel@tonic-gateavailable in thread-safe versions, if appropriate. 390*0Sstevel@tonic-gate 391*0Sstevel@tonic-gate=head2 -i rename file when changed 392*0Sstevel@tonic-gate 393*0Sstevel@tonic-gateIt's only necessary to rename a file when inplace editing when the file 394*0Sstevel@tonic-gatehas changed. Detecting a change is perhaps the difficult bit. 395*0Sstevel@tonic-gate 396*0Sstevel@tonic-gate=head2 All ARGV input should act like E<lt>E<gt> 397*0Sstevel@tonic-gate 398*0Sstevel@tonic-gateeg C<read(ARGV, ...)> doesn't currently read across multiple files. 399*0Sstevel@tonic-gate 400*0Sstevel@tonic-gate=head2 Support for rerunning debugger 401*0Sstevel@tonic-gate 402*0Sstevel@tonic-gateThere should be a way of restarting the debugger on demand. 403*0Sstevel@tonic-gate 404*0Sstevel@tonic-gate=head2 Test Suite for the Debugger 405*0Sstevel@tonic-gate 406*0Sstevel@tonic-gateThe debugger is a complex piece of software and fixing something 407*0Sstevel@tonic-gatehere may inadvertently break something else over there. To tame 408*0Sstevel@tonic-gatethis chaotic behaviour, a test suite is necessary. 409*0Sstevel@tonic-gate 410*0Sstevel@tonic-gate=head2 my sub foo { } 411*0Sstevel@tonic-gate 412*0Sstevel@tonic-gateThe basic principle is sound, but there are problems with the semantics 413*0Sstevel@tonic-gateof self-referential and mutually referential lexical subs: how to 414*0Sstevel@tonic-gatedeclare the subs? 415*0Sstevel@tonic-gate 416*0Sstevel@tonic-gate=head2 One-pass global destruction 417*0Sstevel@tonic-gate 418*0Sstevel@tonic-gateSweeping away all the allocated memory in one go is a laudable goal, but 419*0Sstevel@tonic-gateit's difficult and in most cases, it's easier to let the memory get 420*0Sstevel@tonic-gatefreed by exiting. 421*0Sstevel@tonic-gate 422*0Sstevel@tonic-gate=head2 Rewrite regexp parser 423*0Sstevel@tonic-gate 424*0Sstevel@tonic-gateThere has been talk recently of rewriting the regular expression parser 425*0Sstevel@tonic-gateto produce an optree instead of a chain of opcodes; it's unclear whether 426*0Sstevel@tonic-gateor not this would be a win. 427*0Sstevel@tonic-gate 428*0Sstevel@tonic-gate=head2 Cache recently used regexps 429*0Sstevel@tonic-gate 430*0Sstevel@tonic-gateThis is to speed up 431*0Sstevel@tonic-gate 432*0Sstevel@tonic-gate for my $re (@regexps) { 433*0Sstevel@tonic-gate $matched++ if /$re/ 434*0Sstevel@tonic-gate } 435*0Sstevel@tonic-gate 436*0Sstevel@tonic-gateC<qr//> already gives us a way of saving compiled regexps, but it should 437*0Sstevel@tonic-gatebe done automatically. 438*0Sstevel@tonic-gate 439*0Sstevel@tonic-gate=head2 Cross-compilation support 440*0Sstevel@tonic-gate 441*0Sstevel@tonic-gateBart Schuller reports that using C<microperl> and a cross-compiler, he 442*0Sstevel@tonic-gategot Perl working on the Agenda PDA. However, one cannot build a full 443*0Sstevel@tonic-gatePerl because Configure needs to get the results for the target platform, 444*0Sstevel@tonic-gatefor the host. 445*0Sstevel@tonic-gate 446*0Sstevel@tonic-gate=head2 Bit-shifting bitvectors 447*0Sstevel@tonic-gate 448*0Sstevel@tonic-gateGiven: 449*0Sstevel@tonic-gate 450*0Sstevel@tonic-gate vec($v, 1000, 1) = 1; 451*0Sstevel@tonic-gate 452*0Sstevel@tonic-gateOne should be able to do 453*0Sstevel@tonic-gate 454*0Sstevel@tonic-gate $v <<= 1; 455*0Sstevel@tonic-gate 456*0Sstevel@tonic-gateand have the 999'th bit set. 457*0Sstevel@tonic-gate 458*0Sstevel@tonic-gateCurrently if you try with shift bitvectors you shift the NV/UV, instead 459*0Sstevel@tonic-gateof the bits in the PV. Not very logical. 460*0Sstevel@tonic-gate 461*0Sstevel@tonic-gate=head2 debugger pragma 462*0Sstevel@tonic-gate 463*0Sstevel@tonic-gateThe debugger is implemented in Perl in F<perl5db.pl>; turning it into a 464*0Sstevel@tonic-gatepragma should be easy, but making it work lexically might be more 465*0Sstevel@tonic-gatedifficult. Fiddling with C<$^P> would be necessary. 466*0Sstevel@tonic-gate 467*0Sstevel@tonic-gate=head2 use less pragma 468*0Sstevel@tonic-gate 469*0Sstevel@tonic-gateIdentify areas where speed/memory tradeoffs can be made and have a hint 470*0Sstevel@tonic-gateto switch between them. 471*0Sstevel@tonic-gate 472*0Sstevel@tonic-gate=head2 switch structures 473*0Sstevel@tonic-gate 474*0Sstevel@tonic-gateAlthough we have C<Switch.pm> in core, Larry points to the dormant 475*0Sstevel@tonic-gateC<nswitch> and C<cswitch> ops in F<pp.c>; using these opcodes would be 476*0Sstevel@tonic-gatemuch faster. 477*0Sstevel@tonic-gate 478*0Sstevel@tonic-gate=head2 Cache eval tree 479*0Sstevel@tonic-gate 480*0Sstevel@tonic-gate=head2 rcatmaybe 481*0Sstevel@tonic-gate 482*0Sstevel@tonic-gate=head2 Shrink opcode tables 483*0Sstevel@tonic-gate 484*0Sstevel@tonic-gate=head2 Optimize away @_ 485*0Sstevel@tonic-gate 486*0Sstevel@tonic-gateLook at the "reification" code in C<av.c> 487*0Sstevel@tonic-gate 488*0Sstevel@tonic-gate=head2 Prototypes versus indirect objects 489*0Sstevel@tonic-gate 490*0Sstevel@tonic-gateCurrently, indirect object syntax bypasses prototype checks. 491*0Sstevel@tonic-gate 492*0Sstevel@tonic-gate=head2 Install HTML 493*0Sstevel@tonic-gate 494*0Sstevel@tonic-gateHTML versions of the documentation need to be installed by default; a 495*0Sstevel@tonic-gatecall to C<installhtml> from C<installperl> may be all that's necessary. 496*0Sstevel@tonic-gate 497*0Sstevel@tonic-gate=head2 Prototype method calls 498*0Sstevel@tonic-gate 499*0Sstevel@tonic-gate=head2 Return context prototype declarations 500*0Sstevel@tonic-gate 501*0Sstevel@tonic-gate=head2 magic_setisa 502*0Sstevel@tonic-gate 503*0Sstevel@tonic-gate=head2 Garbage collection 504*0Sstevel@tonic-gate 505*0Sstevel@tonic-gateThere have been persistent mumblings about putting a mark-and-sweep 506*0Sstevel@tonic-gategarbage detector into Perl; Alan Burlison has some ideas about this. 507*0Sstevel@tonic-gate 508*0Sstevel@tonic-gate=head2 IO tutorial 509*0Sstevel@tonic-gate 510*0Sstevel@tonic-gateMark-Jason Dominus has the beginnings of one of these. 511*0Sstevel@tonic-gate 512*0Sstevel@tonic-gate=head2 Rewrite perldoc 513*0Sstevel@tonic-gate 514*0Sstevel@tonic-gateThere are a few suggestions for what to do with C<perldoc>: maybe a 515*0Sstevel@tonic-gatefull-text search, an index function, locating pages on a particular 516*0Sstevel@tonic-gatehigh-level subject, and so on. 517*0Sstevel@tonic-gate 518*0Sstevel@tonic-gate=head2 Install .3p manpages 519*0Sstevel@tonic-gate 520*0Sstevel@tonic-gateThis is a bone of contention; we can create C<.3p> manpages for each 521*0Sstevel@tonic-gatebuilt-in function, but should we install them by default? Tcl does this, 522*0Sstevel@tonic-gateand it clutters up C<apropos>. 523*0Sstevel@tonic-gate 524*0Sstevel@tonic-gate=head2 Unicode tutorial 525*0Sstevel@tonic-gate 526*0Sstevel@tonic-gateSimon Cozens promises to do this before he gets old. 527*0Sstevel@tonic-gate 528*0Sstevel@tonic-gate=head2 Update POSIX.pm for 1003.1-2 529*0Sstevel@tonic-gate 530*0Sstevel@tonic-gate=head2 Retargetable installation 531*0Sstevel@tonic-gate 532*0Sstevel@tonic-gateAllow C<@INC> to be changed after Perl is built. 533*0Sstevel@tonic-gate 534*0Sstevel@tonic-gate=head2 POSIX emulation on non-POSIX systems 535*0Sstevel@tonic-gate 536*0Sstevel@tonic-gateMake C<POSIX.pm> behave as POSIXly as possible everywhere, meaning we 537*0Sstevel@tonic-gatehave to implement POSIX equivalents for some functions if necessary. 538*0Sstevel@tonic-gate 539*0Sstevel@tonic-gate=head2 Rename Win32 headers 540*0Sstevel@tonic-gate 541*0Sstevel@tonic-gate=head2 Finish off lvalue functions 542*0Sstevel@tonic-gate 543*0Sstevel@tonic-gateThey don't work in the debugger, and they don't work for list or hash 544*0Sstevel@tonic-gateslices. 545*0Sstevel@tonic-gate 546*0Sstevel@tonic-gate=head2 Update sprintf documentation 547*0Sstevel@tonic-gate 548*0Sstevel@tonic-gateHugo van der Sanden plans to look at this. 549*0Sstevel@tonic-gate 550*0Sstevel@tonic-gate=head2 Use fchown/fchmod internally 551*0Sstevel@tonic-gate 552*0Sstevel@tonic-gateThis has been done in places, but needs a thorough code review. 553*0Sstevel@tonic-gateAlso fchdir is available in some platforms. 554*0Sstevel@tonic-gate 555*0Sstevel@tonic-gate=head2 Make v-strings overloaded objects 556*0Sstevel@tonic-gate 557*0Sstevel@tonic-gateInstead of having to guess whether a string is a v-string and thus 558*0Sstevel@tonic-gateneeds to be displayed with %vd, make v-strings (readonly) objects 559*0Sstevel@tonic-gate(class "vstring"?) with a stringify overload. 560*0Sstevel@tonic-gate 561*0Sstevel@tonic-gate=head2 Allow restricted hash assignment 562*0Sstevel@tonic-gate 563*0Sstevel@tonic-gateCurrently you're not allowed to assign to a restricted hash at all, 564*0Sstevel@tonic-gateeven with the same keys. 565*0Sstevel@tonic-gate 566*0Sstevel@tonic-gate %restricted = (foo => 42); # error 567*0Sstevel@tonic-gate 568*0Sstevel@tonic-gateThis should be allowed if the new keyset is a subset of the old 569*0Sstevel@tonic-gatekeyset. May require more extra code than we'd like in pp_aassign. 570*0Sstevel@tonic-gate 571*0Sstevel@tonic-gate=head2 Should overload be inheritable? 572*0Sstevel@tonic-gate 573*0Sstevel@tonic-gateShould overload be 'contagious' through @ISA so that derived classes 574*0Sstevel@tonic-gatewould inherit their base classes' overload definitions? What to do 575*0Sstevel@tonic-gatein case of overload conflicts? 576*0Sstevel@tonic-gate 577*0Sstevel@tonic-gate=head2 Taint rethink 578*0Sstevel@tonic-gate 579*0Sstevel@tonic-gateShould taint be stopped from affecting control flow, if ($tainted)? 580*0Sstevel@tonic-gateShould tainted symbolic method calls and subref calls be stopped? 581*0Sstevel@tonic-gate(Look at Ruby's $SAFE levels for inspiration?) 582*0Sstevel@tonic-gate 583*0Sstevel@tonic-gate=head2 Perform correctly when XSUBs call subroutines that exit via goto(LABEL) and friends 584*0Sstevel@tonic-gate 585*0Sstevel@tonic-gateIf an XSUB calls a subroutine that exits using goto(LABEL), 586*0Sstevel@tonic-gatelast(LABEL) or next(LABEL), then the interpreter will very probably crash 587*0Sstevel@tonic-gatewith a segfault because the execution resumes in the XSUB instead of 588*0Sstevel@tonic-gatenever returning there. 589*0Sstevel@tonic-gate 590*0Sstevel@tonic-gate=head1 Vague ideas 591*0Sstevel@tonic-gate 592*0Sstevel@tonic-gateIdeas which have been discussed, and which may or may not happen. 593*0Sstevel@tonic-gate 594*0Sstevel@tonic-gate=head2 ref() in list context 595*0Sstevel@tonic-gate 596*0Sstevel@tonic-gateIt's unclear what this should do or how to do it without breaking old 597*0Sstevel@tonic-gatecode. 598*0Sstevel@tonic-gate 599*0Sstevel@tonic-gate=head2 Make tr/// return histogram of characters in list context 600*0Sstevel@tonic-gate 601*0Sstevel@tonic-gateThere is a patch for this, but it may require Unicodification. 602*0Sstevel@tonic-gate 603*0Sstevel@tonic-gate=head2 Compile to real threaded code 604*0Sstevel@tonic-gate 605*0Sstevel@tonic-gate=head2 Structured types 606*0Sstevel@tonic-gate 607*0Sstevel@tonic-gate=head2 Modifiable $1 et al. 608*0Sstevel@tonic-gate 609*0Sstevel@tonic-gate ($x = "elephant") =~ /e(ph)/; 610*0Sstevel@tonic-gate $1 = "g"; # $x = "elegant" 611*0Sstevel@tonic-gate 612*0Sstevel@tonic-gateWhat happens if there are multiple (nested?) brackets? What if the 613*0Sstevel@tonic-gatestring changes between the match and the assignment? 614*0Sstevel@tonic-gate 615*0Sstevel@tonic-gate=head2 Procedural interfaces for IO::*, etc. 616*0Sstevel@tonic-gate 617*0Sstevel@tonic-gateSome core modules have been accused of being overly-OO. Adding 618*0Sstevel@tonic-gateprocedural interfaces could demystify them. 619*0Sstevel@tonic-gate 620*0Sstevel@tonic-gate=head2 RPC modules 621*0Sstevel@tonic-gate 622*0Sstevel@tonic-gate=head2 Attach/detach debugger from running program 623*0Sstevel@tonic-gate 624*0Sstevel@tonic-gateWith C<gdb>, you can attach the debugger to a running program if you 625*0Sstevel@tonic-gatepass the process ID. It would be good to do this with the Perl debugger 626*0Sstevel@tonic-gateon a running Perl program, although I'm not sure how it would be done. 627*0Sstevel@tonic-gate 628*0Sstevel@tonic-gate=head2 GUI::Native 629*0Sstevel@tonic-gate 630*0Sstevel@tonic-gateA non-core module that would use "native" GUI to create graphical 631*0Sstevel@tonic-gateapplications. 632*0Sstevel@tonic-gate 633*0Sstevel@tonic-gate=head2 foreach(reverse ...) 634*0Sstevel@tonic-gate 635*0Sstevel@tonic-gateCurrently 636*0Sstevel@tonic-gate 637*0Sstevel@tonic-gate foreach (reverse @_) { ... } 638*0Sstevel@tonic-gate 639*0Sstevel@tonic-gateputs C<@_> on the stack, reverses it putting the reversed version on the 640*0Sstevel@tonic-gatestack, then iterates forwards. Instead, it could be special-cased to put 641*0Sstevel@tonic-gateC<@_> on the stack then iterate backwards. 642*0Sstevel@tonic-gate 643*0Sstevel@tonic-gate=head2 Constant function cache 644*0Sstevel@tonic-gate 645*0Sstevel@tonic-gate=head2 Approximate regular expression matching 646*0Sstevel@tonic-gate 647*0Sstevel@tonic-gate=head1 Ongoing 648*0Sstevel@tonic-gate 649*0Sstevel@tonic-gateThese items B<always> need doing: 650*0Sstevel@tonic-gate 651*0Sstevel@tonic-gate=head2 Update guts documentation 652*0Sstevel@tonic-gate 653*0Sstevel@tonic-gateSimon Cozens tries to do this when possible, and contributions to the 654*0Sstevel@tonic-gateC<perlapi> documentation is welcome. 655*0Sstevel@tonic-gate 656*0Sstevel@tonic-gate=head2 Add more tests 657*0Sstevel@tonic-gate 658*0Sstevel@tonic-gateMichael Schwern will donate $500 to Yet Another Society when all core 659*0Sstevel@tonic-gatemodules have tests. 660*0Sstevel@tonic-gate 661*0Sstevel@tonic-gate=head2 Update auxiliary tools 662*0Sstevel@tonic-gate 663*0Sstevel@tonic-gateThe code we ship with Perl should look like good Perl 5. 664*0Sstevel@tonic-gate 665*0Sstevel@tonic-gate=head2 Create debugging macros 666*0Sstevel@tonic-gate 667*0Sstevel@tonic-gateDebugging macros (like printsv, dump) can make debugging perl inside a 668*0Sstevel@tonic-gateC debugger much easier. A good set for gdb comes with mod_perl. 669*0Sstevel@tonic-gateSomething similar should be distributed with perl. 670*0Sstevel@tonic-gate 671*0Sstevel@tonic-gateThe proper way to do this is to use and extend Devel::DebugInit. 672*0Sstevel@tonic-gateDevel::DebugInit also needs to be extended to support threads. 673*0Sstevel@tonic-gate 674*0Sstevel@tonic-gateSee p5p archives for late May/early June 2001 for a recent discussion 675*0Sstevel@tonic-gateon this topic. 676*0Sstevel@tonic-gate 677*0Sstevel@tonic-gate=head2 truncate to the people 678*0Sstevel@tonic-gate 679*0Sstevel@tonic-gateOne can emulate ftruncate() using F_FREESP and F_CHSIZ fcntls 680*0Sstevel@tonic-gate(see the UNIX FAQ for details). This needs to go somewhere near 681*0Sstevel@tonic-gatepp_sys.c:pp_truncate(). 682*0Sstevel@tonic-gate 683*0Sstevel@tonic-gateOne can emulate truncate() easily if one has ftruncate(). 684*0Sstevel@tonic-gateThis emulation should also go near pp_sys.pp_truncate(). 685*0Sstevel@tonic-gate 686*0Sstevel@tonic-gate=head2 Unicode in Filenames 687*0Sstevel@tonic-gate 688*0Sstevel@tonic-gatechdir, chmod, chown, chroot, exec, glob, link, lstat, mkdir, open, 689*0Sstevel@tonic-gateopendir, qx, readdir, readlink, rename, rmdir, stat, symlink, sysopen, 690*0Sstevel@tonic-gatesystem, truncate, unlink, utime, -X. All these could potentially accept 691*0Sstevel@tonic-gateUnicode filenames either as input or output (and in the case of system 692*0Sstevel@tonic-gateand qx Unicode in general, as input or output to/from the shell). 693*0Sstevel@tonic-gateWhether a filesystem - an operating system pair understands Unicode in 694*0Sstevel@tonic-gatefilenames varies. 695*0Sstevel@tonic-gate 696*0Sstevel@tonic-gateKnown combinations that have some level of understanding include 697*0Sstevel@tonic-gateMicrosoft NTFS, Apple HFS+ (In Mac OS 9 and X) and Apple UFS (in Mac 698*0Sstevel@tonic-gateOS X), NFS v4 is rumored to be Unicode, and of course Plan 9. How to 699*0Sstevel@tonic-gatecreate Unicode filenames, what forms of Unicode are accepted and used 700*0Sstevel@tonic-gate(UCS-2, UTF-16, UTF-8), what (if any) is the normalization form used, 701*0Sstevel@tonic-gateand so on, varies. Finding the right level of interfacing to Perl 702*0Sstevel@tonic-gaterequires some thought. Remember that an OS does not implicate a 703*0Sstevel@tonic-gatefilesystem. 704*0Sstevel@tonic-gate 705*0Sstevel@tonic-gate(The Windows -C command flag "wide API support" has been at least 706*0Sstevel@tonic-gatetemporarily retired in 5.8.1, and the -C has been repurposed, see 707*0Sstevel@tonic-gateL<perlrun>.) 708*0Sstevel@tonic-gate 709*0Sstevel@tonic-gate=head1 Unicode in %ENV 710*0Sstevel@tonic-gate 711*0Sstevel@tonic-gateCurrently the %ENV entries are always byte strings. 712*0Sstevel@tonic-gate 713*0Sstevel@tonic-gate=head1 Recently done things 714*0Sstevel@tonic-gate 715*0Sstevel@tonic-gateThese are things which have been on the todo lists in previous releases 716*0Sstevel@tonic-gatebut have recently been completed. 717*0Sstevel@tonic-gate 718*0Sstevel@tonic-gate=head2 Alternative RE syntax module 719*0Sstevel@tonic-gate 720*0Sstevel@tonic-gateThe C<Regexp::English> module, available from the CPAN, provides this: 721*0Sstevel@tonic-gate 722*0Sstevel@tonic-gate my $re = Regexp::English 723*0Sstevel@tonic-gate -> start_of_line 724*0Sstevel@tonic-gate -> literal('Flippers') 725*0Sstevel@tonic-gate -> literal(':') 726*0Sstevel@tonic-gate -> optional 727*0Sstevel@tonic-gate -> whitespace_char 728*0Sstevel@tonic-gate -> end 729*0Sstevel@tonic-gate -> remember 730*0Sstevel@tonic-gate -> multiple 731*0Sstevel@tonic-gate -> digit; 732*0Sstevel@tonic-gate 733*0Sstevel@tonic-gate /$re/; 734*0Sstevel@tonic-gate 735*0Sstevel@tonic-gate=head2 Safe signal handling 736*0Sstevel@tonic-gate 737*0Sstevel@tonic-gateA new signal model went into 5.7.1 without much fanfare. Operations and 738*0Sstevel@tonic-gateC<malloc>s are no longer interrupted by signals, which are handled 739*0Sstevel@tonic-gatebetween opcodes. This means that C<PERL_ASYNC_CHECK> now actually does 740*0Sstevel@tonic-gatesomething. However, there are still a few things that need to be done. 741*0Sstevel@tonic-gate 742*0Sstevel@tonic-gate=head2 Tie Modules 743*0Sstevel@tonic-gate 744*0Sstevel@tonic-gateModules which implement arrays in terms of strings, substrings or files 745*0Sstevel@tonic-gatecan be found on the CPAN. 746*0Sstevel@tonic-gate 747*0Sstevel@tonic-gate=head2 gettimeofday 748*0Sstevel@tonic-gate 749*0Sstevel@tonic-gateC<Time::HiRes> has been integrated into the core. 750*0Sstevel@tonic-gate 751*0Sstevel@tonic-gate=head2 setitimer and getimiter 752*0Sstevel@tonic-gate 753*0Sstevel@tonic-gateAdding C<Time::HiRes> got us this too. 754*0Sstevel@tonic-gate 755*0Sstevel@tonic-gate=head2 Testing __DIE__ hook 756*0Sstevel@tonic-gate 757*0Sstevel@tonic-gateTests have been added. 758*0Sstevel@tonic-gate 759*0Sstevel@tonic-gate=head2 CPP equivalent in Perl 760*0Sstevel@tonic-gate 761*0Sstevel@tonic-gateA C Yardley will probably have done this by the time you can read this. 762*0Sstevel@tonic-gateThis allows for a generalization of the C constant detection used in 763*0Sstevel@tonic-gatebuilding C<Errno.pm>. 764*0Sstevel@tonic-gate 765*0Sstevel@tonic-gate=head2 Explicit switch statements 766*0Sstevel@tonic-gate 767*0Sstevel@tonic-gateC<Switch.pm> has been integrated into the core to give you all manner of 768*0Sstevel@tonic-gateC<switch...case> semantics. 769*0Sstevel@tonic-gate 770*0Sstevel@tonic-gate=head2 autocroak 771*0Sstevel@tonic-gate 772*0Sstevel@tonic-gateThis is C<Fatal.pm>. 773*0Sstevel@tonic-gate 774*0Sstevel@tonic-gate=head2 UTF/EBCDIC 775*0Sstevel@tonic-gate 776*0Sstevel@tonic-gateNick Ing-Simmons has made UTF-EBCDIC (UTR13) work with Perl. 777*0Sstevel@tonic-gate 778*0Sstevel@tonic-gate EBCDIC? http://www.unicode.org/unicode/reports/tr16/ 779*0Sstevel@tonic-gate 780*0Sstevel@tonic-gate=head2 UTF Regexes 781*0Sstevel@tonic-gate 782*0Sstevel@tonic-gateAlthough there are probably some small bugs to be rooted out, Jarkko 783*0Sstevel@tonic-gateHietaniemi has made regular expressions polymorphic between bytes and 784*0Sstevel@tonic-gatecharacters. 785*0Sstevel@tonic-gate 786*0Sstevel@tonic-gate=head2 perlcc to produce executable 787*0Sstevel@tonic-gate 788*0Sstevel@tonic-gateC<perlcc> was recently rewritten, and can now produce standalone 789*0Sstevel@tonic-gateexecutables. 790*0Sstevel@tonic-gate 791*0Sstevel@tonic-gate=head2 END blocks saved in compiled output 792*0Sstevel@tonic-gate 793*0Sstevel@tonic-gate=head2 Secure temporary file module 794*0Sstevel@tonic-gate 795*0Sstevel@tonic-gateTim Jenness' C<File::Temp> is now in core. 796*0Sstevel@tonic-gate 797*0Sstevel@tonic-gate=head2 Integrate Time::HiRes 798*0Sstevel@tonic-gate 799*0Sstevel@tonic-gateThis module is now part of core. 800*0Sstevel@tonic-gate 801*0Sstevel@tonic-gate=head2 Turn Cwd into XS 802*0Sstevel@tonic-gate 803*0Sstevel@tonic-gateBenjamin Sugars has done this. 804*0Sstevel@tonic-gate 805*0Sstevel@tonic-gate=head2 Mmap for input 806*0Sstevel@tonic-gate 807*0Sstevel@tonic-gateNick Ing-Simmons' C<perlio> supports an C<mmap> IO method. 808*0Sstevel@tonic-gate 809*0Sstevel@tonic-gate=head2 Byte to/from UTF-8 and UTF-8 to/from local conversion 810*0Sstevel@tonic-gate 811*0Sstevel@tonic-gateC<Encode> provides this. 812*0Sstevel@tonic-gate 813*0Sstevel@tonic-gate=head2 Add sockatmark support 814*0Sstevel@tonic-gate 815*0Sstevel@tonic-gateAdded in 5.7.1 816*0Sstevel@tonic-gate 817*0Sstevel@tonic-gate=head2 Mailing list archives 818*0Sstevel@tonic-gate 819*0Sstevel@tonic-gatehttp://lists.perl.org/ , http://archive.develooper.com/ 820*0Sstevel@tonic-gate 821*0Sstevel@tonic-gate=head2 Bug tracking 822*0Sstevel@tonic-gate 823*0Sstevel@tonic-gateSince 5.8.0 perl uses the RT bug tracking system from Jesse Vincent, 824*0Sstevel@tonic-gateimplemented by Robert Spier at http://bugs.perl.org/ 825*0Sstevel@tonic-gate 826*0Sstevel@tonic-gate=head2 Integrate MacPerl 827*0Sstevel@tonic-gate 828*0Sstevel@tonic-gateChris Nandor and Matthias Neeracher have integrated the MacPerl changes 829*0Sstevel@tonic-gateinto 5.6.0. 830*0Sstevel@tonic-gate 831*0Sstevel@tonic-gate=head2 Web "nerve center" for Perl 832*0Sstevel@tonic-gate 833*0Sstevel@tonic-gatehttp://use.perl.org/ is what you're looking for. 834*0Sstevel@tonic-gate 835*0Sstevel@tonic-gate=head2 Regular expression tutorial 836*0Sstevel@tonic-gate 837*0Sstevel@tonic-gateC<perlretut>, provided by Mark Kvale. 838*0Sstevel@tonic-gate 839*0Sstevel@tonic-gate=head2 Debugging Tutorial 840*0Sstevel@tonic-gate 841*0Sstevel@tonic-gateC<perldebtut>, written by Richard Foley. 842*0Sstevel@tonic-gate 843*0Sstevel@tonic-gate=head2 Integrate new modules 844*0Sstevel@tonic-gate 845*0Sstevel@tonic-gateJarkko has been integrating madly into 5.7.x 846*0Sstevel@tonic-gate 847*0Sstevel@tonic-gate=head2 Integrate profiler 848*0Sstevel@tonic-gate 849*0Sstevel@tonic-gateC<Devel::DProf> is now a core module. 850*0Sstevel@tonic-gate 851*0Sstevel@tonic-gate=head2 Y2K error detection 852*0Sstevel@tonic-gate 853*0Sstevel@tonic-gateThere's a configure option to detect unsafe concatenation with "19", and 854*0Sstevel@tonic-gatea CPAN module. (C<D'oh::Year>) 855*0Sstevel@tonic-gate 856*0Sstevel@tonic-gate=head2 Regular expression debugger 857*0Sstevel@tonic-gate 858*0Sstevel@tonic-gateWhile not part of core, Mark-Jason Dominus has written C<Rx> and has 859*0Sstevel@tonic-gatealso come up with a generalised strategy for regular expression 860*0Sstevel@tonic-gatedebugging. 861*0Sstevel@tonic-gate 862*0Sstevel@tonic-gate=head2 POD checker 863*0Sstevel@tonic-gate 864*0Sstevel@tonic-gateThat's, uh, F<podchecker> 865*0Sstevel@tonic-gate 866*0Sstevel@tonic-gate=head2 "Dynamic" lexicals 867*0Sstevel@tonic-gate 868*0Sstevel@tonic-gate=head2 Cache precompiled modules 869*0Sstevel@tonic-gate 870*0Sstevel@tonic-gate=head1 Deprecated Wishes 871*0Sstevel@tonic-gate 872*0Sstevel@tonic-gateThese are items which used to be in the todo file, but have been 873*0Sstevel@tonic-gatedeprecated for some reason. 874*0Sstevel@tonic-gate 875*0Sstevel@tonic-gate=head2 Loop control on do{} 876*0Sstevel@tonic-gate 877*0Sstevel@tonic-gateThis would break old code; use C<do{{ }}> instead. 878*0Sstevel@tonic-gate 879*0Sstevel@tonic-gate=head2 Lexically scoped typeglobs 880*0Sstevel@tonic-gate 881*0Sstevel@tonic-gateNot needed now we have lexical IO handles. 882*0Sstevel@tonic-gate 883*0Sstevel@tonic-gate=head2 format BOTTOM 884*0Sstevel@tonic-gate 885*0Sstevel@tonic-gate=head2 report HANDLE 886*0Sstevel@tonic-gate 887*0Sstevel@tonic-gateDamian Conway's text formatting modules seem to be the Way To Go. 888*0Sstevel@tonic-gate 889*0Sstevel@tonic-gate=head2 Generalised want()/caller()) 890*0Sstevel@tonic-gate 891*0Sstevel@tonic-gateRobin Houston's C<Want> module does this. 892*0Sstevel@tonic-gate 893*0Sstevel@tonic-gate=head2 Named prototypes 894*0Sstevel@tonic-gate 895*0Sstevel@tonic-gateThis seems to be delayed until Perl 6. 896*0Sstevel@tonic-gate 897*0Sstevel@tonic-gate=head2 Built-in globbing 898*0Sstevel@tonic-gate 899*0Sstevel@tonic-gateThe C<File::Glob> module has been used to replace the C<glob> function. 900*0Sstevel@tonic-gate 901*0Sstevel@tonic-gate=head2 Regression tests for suidperl 902*0Sstevel@tonic-gate 903*0Sstevel@tonic-gateC<suidperl> is deprecated in favour of common sense. 904*0Sstevel@tonic-gate 905*0Sstevel@tonic-gate=head2 Cached hash values 906*0Sstevel@tonic-gate 907*0Sstevel@tonic-gateWe have shared hash keys, which perform the same job. 908*0Sstevel@tonic-gate 909*0Sstevel@tonic-gate=head2 Add compression modules 910*0Sstevel@tonic-gate 911*0Sstevel@tonic-gateThe compression modules are a little heavy; meanwhile, Nick Clark is 912*0Sstevel@tonic-gateworking on experimental pragmata to do transparent decompression on 913*0Sstevel@tonic-gateinput. 914*0Sstevel@tonic-gate 915*0Sstevel@tonic-gate=head2 Reorganise documentation into tutorials/references 916*0Sstevel@tonic-gate 917*0Sstevel@tonic-gateCould not get consensus on P5P about this. 918*0Sstevel@tonic-gate 919*0Sstevel@tonic-gate=head2 Remove distinction between functions and operators 920*0Sstevel@tonic-gate 921*0Sstevel@tonic-gateCaution: highly flammable. 922*0Sstevel@tonic-gate 923*0Sstevel@tonic-gate=head2 Make XS easier to use 924*0Sstevel@tonic-gate 925*0Sstevel@tonic-gateUse C<Inline> instead, or SWIG. 926*0Sstevel@tonic-gate 927*0Sstevel@tonic-gate=head2 Make embedding easier to use 928*0Sstevel@tonic-gate 929*0Sstevel@tonic-gateUse C<Inline::CPR>. 930*0Sstevel@tonic-gate 931*0Sstevel@tonic-gate=head2 man for perl 932*0Sstevel@tonic-gate 933*0Sstevel@tonic-gateSee the Perl Power Tools. ( http://language.perl.com/ppt/ ) 934*0Sstevel@tonic-gate 935*0Sstevel@tonic-gate=head2 my $Package::variable 936*0Sstevel@tonic-gate 937*0Sstevel@tonic-gateUse C<our> instead. 938*0Sstevel@tonic-gate 939*0Sstevel@tonic-gate=head2 "or" tests defined, not truth 940*0Sstevel@tonic-gate 941*0Sstevel@tonic-gateSuggesting this on P5P B<will> cause a boring and interminable flamewar. 942*0Sstevel@tonic-gate 943*0Sstevel@tonic-gate=head2 "class"-based lexicals 944*0Sstevel@tonic-gate 945*0Sstevel@tonic-gateUse flyweight objects, secure hashes or, dare I say it, pseudo-hashes instead. 946*0Sstevel@tonic-gate(Or whatever will replace pseudohashes in 5.10.) 947*0Sstevel@tonic-gate 948*0Sstevel@tonic-gate=head2 byteperl 949*0Sstevel@tonic-gate 950*0Sstevel@tonic-gateC<ByteLoader> covers this. 951*0Sstevel@tonic-gate 952*0Sstevel@tonic-gate=head2 Lazy evaluation / tail recursion removal 953*0Sstevel@tonic-gate 954*0Sstevel@tonic-gateC<List::Util> gives first() (a short-circuiting grep); tail recursion 955*0Sstevel@tonic-gateremoval is done manually, with C<goto &whoami;>. (However, MJD has 956*0Sstevel@tonic-gatefound that C<goto &whoami> introduces a performance penalty, so maybe 957*0Sstevel@tonic-gatethere should be a way to do this after all: C<sub foo {START: ... goto 958*0Sstevel@tonic-gateSTART;> is better.) 959*0Sstevel@tonic-gate 960*0Sstevel@tonic-gate=head2 Make "use utf8" the default 961*0Sstevel@tonic-gate 962*0Sstevel@tonic-gateBecause of backward compatibility this is difficult: scripts could not 963*0Sstevel@tonic-gatecontain B<any legacy eight-bit data> (like Latin-1) anymore, even in 964*0Sstevel@tonic-gatestring literals or pod. Also would introduce a measurable slowdown of 965*0Sstevel@tonic-gateat least few percentages since all regular expression operations would 966*0Sstevel@tonic-gatebe done in full UTF-8. But if you want to try this, add 967*0Sstevel@tonic-gate-DUSE_UTF8_SCRIPTS to your compilation flags. 968*0Sstevel@tonic-gate 969*0Sstevel@tonic-gate=head2 Unicode collation and normalization 970*0Sstevel@tonic-gate 971*0Sstevel@tonic-gateThe Unicode::Collate and Unicode::Normalize modules 972*0Sstevel@tonic-gateby SADAHIRO Tomoyuki have been included since 5.8.0. 973*0Sstevel@tonic-gate 974*0Sstevel@tonic-gate Collation? http://www.unicode.org/unicode/reports/tr10/ 975*0Sstevel@tonic-gate Normalization? http://www.unicode.org/unicode/reports/tr15/ 976*0Sstevel@tonic-gate 977*0Sstevel@tonic-gate=head2 pack/unpack tutorial 978*0Sstevel@tonic-gate 979*0Sstevel@tonic-gateWolfgang Laun finished what Simon Cozens started. 980*0Sstevel@tonic-gate 981*0Sstevel@tonic-gate=cut 982