xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/pod/perltodo.pod (revision 0:68f95e015346)
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