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