Upgrade to Cwd 2.17_03
[p5sagit/p5-mst-13.2.git] / pod / perlhack.pod
CommitLineData
e8cd7eae 1=head1 NAME
2
3perlhack - How to hack at the Perl internals
4
5=head1 DESCRIPTION
6
7This document attempts to explain how Perl development takes place,
8and ends with some suggestions for people wanting to become bona fide
9porters.
10
11The perl5-porters mailing list is where the Perl standard distribution
12is maintained and developed. The list can get anywhere from 10 to 150
13messages a day, depending on the heatedness of the debate. Most days
14there are two or three patches, extensions, features, or bugs being
15discussed at a time.
16
f8e3975a 17A searchable archive of the list is at either:
e8cd7eae 18
19 http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/
20
f8e3975a 21or
22
23 http://archive.develooper.com/perl5-porters@perl.org/
24
e8cd7eae 25List subscribers (the porters themselves) come in several flavours.
26Some are quiet curious lurkers, who rarely pitch in and instead watch
27the ongoing development to ensure they're forewarned of new changes or
28features in Perl. Some are representatives of vendors, who are there
29to make sure that Perl continues to compile and work on their
30platforms. Some patch any reported bug that they know how to fix,
31some are actively patching their pet area (threads, Win32, the regexp
32engine), while others seem to do nothing but complain. In other
33words, it's your usual mix of technical people.
34
35Over this group of porters presides Larry Wall. He has the final word
f6c51b38 36in what does and does not change in the Perl language. Various
37releases of Perl are shepherded by a ``pumpking'', a porter
38responsible for gathering patches, deciding on a patch-by-patch
39feature-by-feature basis what will and will not go into the release.
caf100c0 40For instance, Gurusamy Sarathy was the pumpking for the 5.6 release of
41Perl, and Jarkko Hietaniemi is the pumpking for the 5.8 release, and
42Hugo van der Sanden will be the pumpking for the 5.10 release.
e8cd7eae 43
44In addition, various people are pumpkings for different things. For
45instance, Andy Dougherty and Jarkko Hietaniemi share the I<Configure>
caf100c0 46pumpkin.
e8cd7eae 47
48Larry sees Perl development along the lines of the US government:
49there's the Legislature (the porters), the Executive branch (the
50pumpkings), and the Supreme Court (Larry). The legislature can
51discuss and submit patches to the executive branch all they like, but
52the executive branch is free to veto them. Rarely, the Supreme Court
53will side with the executive branch over the legislature, or the
54legislature over the executive branch. Mostly, however, the
55legislature and the executive branch are supposed to get along and
56work out their differences without impeachment or court cases.
57
58You might sometimes see reference to Rule 1 and Rule 2. Larry's power
59as Supreme Court is expressed in The Rules:
60
61=over 4
62
63=item 1
64
65Larry is always by definition right about how Perl should behave.
66This means he has final veto power on the core functionality.
67
68=item 2
69
70Larry is allowed to change his mind about any matter at a later date,
71regardless of whether he previously invoked Rule 1.
72
73=back
74
75Got that? Larry is always right, even when he was wrong. It's rare
76to see either Rule exercised, but they are often alluded to.
77
78New features and extensions to the language are contentious, because
79the criteria used by the pumpkings, Larry, and other porters to decide
80which features should be implemented and incorporated are not codified
81in a few small design goals as with some other languages. Instead,
82the heuristics are flexible and often difficult to fathom. Here is
83one person's list, roughly in decreasing order of importance, of
84heuristics that new features have to be weighed against:
85
86=over 4
87
88=item Does concept match the general goals of Perl?
89
90These haven't been written anywhere in stone, but one approximation
91is:
92
93 1. Keep it fast, simple, and useful.
94 2. Keep features/concepts as orthogonal as possible.
95 3. No arbitrary limits (platforms, data sizes, cultures).
96 4. Keep it open and exciting to use/patch/advocate Perl everywhere.
97 5. Either assimilate new technologies, or build bridges to them.
98
99=item Where is the implementation?
100
101All the talk in the world is useless without an implementation. In
102almost every case, the person or people who argue for a new feature
103will be expected to be the ones who implement it. Porters capable
104of coding new features have their own agendas, and are not available
105to implement your (possibly good) idea.
106
107=item Backwards compatibility
108
109It's a cardinal sin to break existing Perl programs. New warnings are
110contentious--some say that a program that emits warnings is not
111broken, while others say it is. Adding keywords has the potential to
112break programs, changing the meaning of existing token sequences or
113functions might break programs.
114
115=item Could it be a module instead?
116
117Perl 5 has extension mechanisms, modules and XS, specifically to avoid
118the need to keep changing the Perl interpreter. You can write modules
119that export functions, you can give those functions prototypes so they
120can be called like built-in functions, you can even write XS code to
121mess with the runtime data structures of the Perl interpreter if you
122want to implement really complicated things. If it can be done in a
123module instead of in the core, it's highly unlikely to be added.
124
125=item Is the feature generic enough?
126
127Is this something that only the submitter wants added to the language,
128or would it be broadly useful? Sometimes, instead of adding a feature
129with a tight focus, the porters might decide to wait until someone
130implements the more generalized feature. For instance, instead of
131implementing a ``delayed evaluation'' feature, the porters are waiting
132for a macro system that would permit delayed evaluation and much more.
133
134=item Does it potentially introduce new bugs?
135
136Radical rewrites of large chunks of the Perl interpreter have the
137potential to introduce new bugs. The smaller and more localized the
138change, the better.
139
140=item Does it preclude other desirable features?
141
142A patch is likely to be rejected if it closes off future avenues of
143development. For instance, a patch that placed a true and final
144interpretation on prototypes is likely to be rejected because there
145are still options for the future of prototypes that haven't been
146addressed.
147
148=item Is the implementation robust?
149
150Good patches (tight code, complete, correct) stand more chance of
151going in. Sloppy or incorrect patches might be placed on the back
152burner until the pumpking has time to fix, or might be discarded
153altogether without further notice.
154
155=item Is the implementation generic enough to be portable?
156
157The worst patches make use of a system-specific features. It's highly
158unlikely that nonportable additions to the Perl language will be
159accepted.
160
a936dd3c 161=item Is the implementation tested?
162
163Patches which change behaviour (fixing bugs or introducing new features)
164must include regression tests to verify that everything works as expected.
165Without tests provided by the original author, how can anyone else changing
166perl in the future be sure that they haven't unwittingly broken the behaviour
167the patch implements? And without tests, how can the patch's author be
9d077eaa 168confident that his/her hard work put into the patch won't be accidentally
a936dd3c 169thrown away by someone in the future?
170
e8cd7eae 171=item Is there enough documentation?
172
173Patches without documentation are probably ill-thought out or
174incomplete. Nothing can be added without documentation, so submitting
175a patch for the appropriate manpages as well as the source code is
a936dd3c 176always a good idea.
e8cd7eae 177
178=item Is there another way to do it?
179
180Larry said ``Although the Perl Slogan is I<There's More Than One Way
181to Do It>, I hesitate to make 10 ways to do something''. This is a
182tricky heuristic to navigate, though--one man's essential addition is
183another man's pointless cruft.
184
185=item Does it create too much work?
186
187Work for the pumpking, work for Perl programmers, work for module
188authors, ... Perl is supposed to be easy.
189
f6c51b38 190=item Patches speak louder than words
191
192Working code is always preferred to pie-in-the-sky ideas. A patch to
193add a feature stands a much higher chance of making it to the language
194than does a random feature request, no matter how fervently argued the
195request might be. This ties into ``Will it be useful?'', as the fact
196that someone took the time to make the patch demonstrates a strong
197desire for the feature.
198
e8cd7eae 199=back
200
201If you're on the list, you might hear the word ``core'' bandied
202around. It refers to the standard distribution. ``Hacking on the
203core'' means you're changing the C source code to the Perl
204interpreter. ``A core module'' is one that ships with Perl.
205
a1f349fd 206=head2 Keeping in sync
207
e8cd7eae 208The source code to the Perl interpreter, in its different versions, is
f224927c 209kept in a repository managed by a revision control system ( which is
210currently the Perforce program, see http://perforce.com/ ). The
e8cd7eae 211pumpkings and a few others have access to the repository to check in
212changes. Periodically the pumpking for the development version of Perl
213will release a new version, so the rest of the porters can see what's
2be4c08b 214changed. The current state of the main trunk of repository, and patches
215that describe the individual changes that have happened since the last
216public release are available at this location:
217
0cfb3454 218 http://public.activestate.com/gsar/APC/
2be4c08b 219 ftp://ftp.linux.activestate.com/pub/staff/gsar/APC/
220
0cfb3454 221If you're looking for a particular change, or a change that affected
222a particular set of files, you may find the B<Perl Repository Browser>
223useful:
224
225 http://public.activestate.com/cgi-bin/perlbrowse
226
227You may also want to subscribe to the perl5-changes mailing list to
228receive a copy of each patch that gets submitted to the maintenance
229and development "branches" of the perl repository. See
230http://lists.perl.org/ for subscription information.
231
a1f349fd 232If you are a member of the perl5-porters mailing list, it is a good
233thing to keep in touch with the most recent changes. If not only to
234verify if what you would have posted as a bug report isn't already
235solved in the most recent available perl development branch, also
236known as perl-current, bleading edge perl, bleedperl or bleadperl.
2be4c08b 237
238Needless to say, the source code in perl-current is usually in a perpetual
239state of evolution. You should expect it to be very buggy. Do B<not> use
240it for any purpose other than testing and development.
e8cd7eae 241
3e148164 242Keeping in sync with the most recent branch can be done in several ways,
243but the most convenient and reliable way is using B<rsync>, available at
244ftp://rsync.samba.org/pub/rsync/ . (You can also get the most recent
245branch by FTP.)
a1f349fd 246
247If you choose to keep in sync using rsync, there are two approaches
3e148164 248to doing so:
a1f349fd 249
250=over 4
251
252=item rsync'ing the source tree
253
3e148164 254Presuming you are in the directory where your perl source resides
a1f349fd 255and you have rsync installed and available, you can `upgrade' to
256the bleadperl using:
257
258 # rsync -avz rsync://ftp.linux.activestate.com/perl-current/ .
259
260This takes care of updating every single item in the source tree to
261the latest applied patch level, creating files that are new (to your
262distribution) and setting date/time stamps of existing files to
263reflect the bleadperl status.
264
c6d0653e 265Note that this will not delete any files that were in '.' before
266the rsync. Once you are sure that the rsync is running correctly,
267run it with the --delete and the --dry-run options like this:
268
269 # rsync -avz --delete --dry-run rsync://ftp.linux.activestate.com/perl-current/ .
270
271This will I<simulate> an rsync run that also deletes files not
272present in the bleadperl master copy. Observe the results from
273this run closely. If you are sure that the actual run would delete
274no files precious to you, you could remove the '--dry-run' option.
275
a1f349fd 276You can than check what patch was the latest that was applied by
277looking in the file B<.patch>, which will show the number of the
278latest patch.
279
280If you have more than one machine to keep in sync, and not all of
281them have access to the WAN (so you are not able to rsync all the
282source trees to the real source), there are some ways to get around
283this problem.
284
285=over 4
286
287=item Using rsync over the LAN
288
289Set up a local rsync server which makes the rsynced source tree
3e148164 290available to the LAN and sync the other machines against this
a1f349fd 291directory.
292
1577cd80 293From http://rsync.samba.org/README.html :
a1f349fd 294
295 "Rsync uses rsh or ssh for communication. It does not need to be
296 setuid and requires no special privileges for installation. It
3958b146 297 does not require an inetd entry or a daemon. You must, however,
a1f349fd 298 have a working rsh or ssh system. Using ssh is recommended for
299 its security features."
300
301=item Using pushing over the NFS
302
303Having the other systems mounted over the NFS, you can take an
3e148164 304active pushing approach by checking the just updated tree against
305the other not-yet synced trees. An example would be
306
307 #!/usr/bin/perl -w
308
309 use strict;
310 use File::Copy;
311
312 my %MF = map {
313 m/(\S+)/;
314 $1 => [ (stat $1)[2, 7, 9] ]; # mode, size, mtime
315 } `cat MANIFEST`;
316
317 my %remote = map { $_ => "/$_/pro/3gl/CPAN/perl-5.7.1" } qw(host1 host2);
318
319 foreach my $host (keys %remote) {
320 unless (-d $remote{$host}) {
321 print STDERR "Cannot Xsync for host $host\n";
322 next;
323 }
324 foreach my $file (keys %MF) {
325 my $rfile = "$remote{$host}/$file";
326 my ($mode, $size, $mtime) = (stat $rfile)[2, 7, 9];
327 defined $size or ($mode, $size, $mtime) = (0, 0, 0);
328 $size == $MF{$file}[1] && $mtime == $MF{$file}[2] and next;
329 printf "%4s %-34s %8d %9d %8d %9d\n",
330 $host, $file, $MF{$file}[1], $MF{$file}[2], $size, $mtime;
331 unlink $rfile;
332 copy ($file, $rfile);
333 utime time, $MF{$file}[2], $rfile;
334 chmod $MF{$file}[0], $rfile;
335 }
336 }
337
338though this is not perfect. It could be improved with checking
a1f349fd 339file checksums before updating. Not all NFS systems support
340reliable utime support (when used over the NFS).
341
342=back
343
344=item rsync'ing the patches
345
346The source tree is maintained by the pumpking who applies patches to
347the files in the tree. These patches are either created by the
348pumpking himself using C<diff -c> after updating the file manually or
349by applying patches sent in by posters on the perl5-porters list.
350These patches are also saved and rsync'able, so you can apply them
351yourself to the source files.
352
353Presuming you are in a directory where your patches reside, you can
3e148164 354get them in sync with
a1f349fd 355
356 # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
357
358This makes sure the latest available patch is downloaded to your
359patch directory.
360
3e148164 361It's then up to you to apply these patches, using something like
a1f349fd 362
df3477ff 363 # last=`ls -t *.gz | sed q`
a1f349fd 364 # rsync -avz rsync://ftp.linux.activestate.com/perl-current-diffs/ .
365 # find . -name '*.gz' -newer $last -exec gzcat {} \; >blead.patch
366 # cd ../perl-current
367 # patch -p1 -N <../perl-current-diffs/blead.patch
368
369or, since this is only a hint towards how it works, use CPAN-patchaperl
370from Andreas König to have better control over the patching process.
371
372=back
373
f7e1e956 374=head2 Why rsync the source tree
a1f349fd 375
376=over 4
377
10f58044 378=item It's easier to rsync the source tree
a1f349fd 379
380Since you don't have to apply the patches yourself, you are sure all
381files in the source tree are in the right state.
382
a1f349fd 383=item It's more reliable
384
0cfb3454 385While both the rsync-able source and patch areas are automatically
386updated every few minutes, keep in mind that applying patches may
387sometimes mean careful hand-holding, especially if your version of
388the C<patch> program does not understand how to deal with new files,
389files with 8-bit characters, or files without trailing newlines.
a1f349fd 390
391=back
392
f7e1e956 393=head2 Why rsync the patches
a1f349fd 394
395=over 4
396
10f58044 397=item It's easier to rsync the patches
a1f349fd 398
399If you have more than one machine that you want to keep in track with
3e148164 400bleadperl, it's easier to rsync the patches only once and then apply
a1f349fd 401them to all the source trees on the different machines.
402
403In case you try to keep in pace on 5 different machines, for which
404only one of them has access to the WAN, rsync'ing all the source
3e148164 405trees should than be done 5 times over the NFS. Having
a1f349fd 406rsync'ed the patches only once, I can apply them to all the source
3e148164 407trees automatically. Need you say more ;-)
a1f349fd 408
409=item It's a good reference
410
411If you do not only like to have the most recent development branch,
412but also like to B<fix> bugs, or extend features, you want to dive
413into the sources. If you are a seasoned perl core diver, you don't
414need no manuals, tips, roadmaps, perlguts.pod or other aids to find
415your way around. But if you are a starter, the patches may help you
416in finding where you should start and how to change the bits that
417bug you.
418
419The file B<Changes> is updated on occasions the pumpking sees as his
420own little sync points. On those occasions, he releases a tar-ball of
421the current source tree (i.e. perl@7582.tar.gz), which will be an
422excellent point to start with when choosing to use the 'rsync the
423patches' scheme. Starting with perl@7582, which means a set of source
424files on which the latest applied patch is number 7582, you apply all
f18956b7 425succeeding patches available from then on (7583, 7584, ...).
a1f349fd 426
427You can use the patches later as a kind of search archive.
428
429=over 4
430
431=item Finding a start point
432
433If you want to fix/change the behaviour of function/feature Foo, just
434scan the patches for patches that mention Foo either in the subject,
3e148164 435the comments, or the body of the fix. A good chance the patch shows
a1f349fd 436you the files that are affected by that patch which are very likely
437to be the starting point of your journey into the guts of perl.
438
439=item Finding how to fix a bug
440
441If you've found I<where> the function/feature Foo misbehaves, but you
442don't know how to fix it (but you do know the change you want to
443make), you can, again, peruse the patches for similar changes and
444look how others apply the fix.
445
446=item Finding the source of misbehaviour
447
448When you keep in sync with bleadperl, the pumpking would love to
3958b146 449I<see> that the community efforts really work. So after each of his
a1f349fd 450sync points, you are to 'make test' to check if everything is still
451in working order. If it is, you do 'make ok', which will send an OK
452report to perlbug@perl.org. (If you do not have access to a mailer
3e148164 453from the system you just finished successfully 'make test', you can
a1f349fd 454do 'make okfile', which creates the file C<perl.ok>, which you can
455than take to your favourite mailer and mail yourself).
456
3958b146 457But of course, as always, things will not always lead to a success
a1f349fd 458path, and one or more test do not pass the 'make test'. Before
459sending in a bug report (using 'make nok' or 'make nokfile'), check
460the mailing list if someone else has reported the bug already and if
461so, confirm it by replying to that message. If not, you might want to
462trace the source of that misbehaviour B<before> sending in the bug,
463which will help all the other porters in finding the solution.
464
3e148164 465Here the saved patches come in very handy. You can check the list of
466patches to see which patch changed what file and what change caused
467the misbehaviour. If you note that in the bug report, it saves the
468one trying to solve it, looking for that point.
a1f349fd 469
470=back
471
472If searching the patches is too bothersome, you might consider using
473perl's bugtron to find more information about discussions and
474ramblings on posted bugs.
475
3e148164 476If you want to get the best of both worlds, rsync both the source
477tree for convenience, reliability and ease and rsync the patches
478for reference.
479
52315700 480=back
481
fcc89a64 482=head2 Working with the source
483
484Because you cannot use the Perforce client, you cannot easily generate
485diffs against the repository, nor will merges occur when you update
486via rsync. If you edit a file locally and then rsync against the
487latest source, changes made in the remote copy will I<overwrite> your
488local versions!
489
490The best way to deal with this is to maintain a tree of symlinks to
491the rsync'd source. Then, when you want to edit a file, you remove
492the symlink, copy the real file into the other tree, and edit it. You
493can then diff your edited file against the original to generate a
494patch, and you can safely update the original tree.
495
496Perl's F<Configure> script can generate this tree of symlinks for you.
497The following example assumes that you have used rsync to pull a copy
498of the Perl source into the F<perl-rsync> directory. In the directory
499above that one, you can execute the following commands:
500
501 mkdir perl-dev
502 cd perl-dev
503 ../perl-rsync/Configure -Dmksymlinks -Dusedevel -D"optimize=-g"
504
505This will start the Perl configuration process. After a few prompts,
506you should see something like this:
507
508 Symbolic links are supported.
509
510 Checking how to test for symbolic links...
511 Your builtin 'test -h' may be broken.
512 Trying external '/usr/bin/test -h'.
513 You can test for symbolic links with '/usr/bin/test -h'.
514
515 Creating the symbolic links...
516 (First creating the subdirectories...)
517 (Then creating the symlinks...)
518
519The specifics may vary based on your operating system, of course.
520After you see this, you can abort the F<Configure> script, and you
521will see that the directory you are in has a tree of symlinks to the
522F<perl-rsync> directories and files.
523
524If you plan to do a lot of work with the Perl source, here are some
525Bourne shell script functions that can make your life easier:
526
527 function edit {
528 if [ -L $1 ]; then
529 mv $1 $1.orig
530 cp $1.orig $1
531 vi $1
532 else
533 /bin/vi $1
534 fi
535 }
536
537 function unedit {
538 if [ -L $1.orig ]; then
539 rm $1
540 mv $1.orig $1
541 fi
542 }
543
544Replace "vi" with your favorite flavor of editor.
545
546Here is another function which will quickly generate a patch for the
547files which have been edited in your symlink tree:
548
549 mkpatchorig() {
550 local diffopts
551 for f in `find . -name '*.orig' | sed s,^\./,,`
552 do
553 case `echo $f | sed 's,.orig$,,;s,.*\.,,'` in
554 c) diffopts=-p ;;
555 pod) diffopts='-F^=' ;;
556 *) diffopts= ;;
557 esac
558 diff -du $diffopts $f `echo $f | sed 's,.orig$,,'`
559 done
560 }
561
562This function produces patches which include enough context to make
563your changes obvious. This makes it easier for the Perl pumpking(s)
564to review them when you send them to the perl5-porters list, and that
565means they're more likely to get applied.
566
567This function assumed a GNU diff, and may require some tweaking for
568other diff variants.
52315700 569
3fd28c4e 570=head2 Perlbug administration
52315700 571
3fd28c4e 572There is a single remote administrative interface for modifying bug status,
573category, open issues etc. using the B<RT> I<bugtracker> system, maintained
574by I<Robert Spier>. Become an administrator, and close any bugs you can get
575your sticky mitts on:
52315700 576
3fd28c4e 577 http://rt.perl.org
52315700 578
3fd28c4e 579The bugtracker mechanism for B<perl5> bugs in particular is at:
52315700 580
3fd28c4e 581 http://bugs6.perl.org/perlbug
52315700 582
3fd28c4e 583To email the bug system administrators:
52315700 584
3fd28c4e 585 "perlbug-admin" <perlbug-admin@perl.org>
52315700 586
52315700 587
a1f349fd 588=head2 Submitting patches
589
f7e1e956 590Always submit patches to I<perl5-porters@perl.org>. If you're
591patching a core module and there's an author listed, send the author a
592copy (see L<Patching a core module>). This lets other porters review
593your patch, which catches a surprising number of errors in patches.
594Either use the diff program (available in source code form from
f224927c 595ftp://ftp.gnu.org/pub/gnu/ , or use Johan Vromans' I<makepatch>
f7e1e956 596(available from I<CPAN/authors/id/JV/>). Unified diffs are preferred,
597but context diffs are accepted. Do not send RCS-style diffs or diffs
598without context lines. More information is given in the
599I<Porting/patching.pod> file in the Perl source distribution. Please
600patch against the latest B<development> version (e.g., if you're
601fixing a bug in the 5.005 track, patch against the latest 5.005_5x
602version). Only patches that survive the heat of the development
603branch get applied to maintenance versions.
604
605Your patch should update the documentation and test suite. See
606L<Writing a test>.
e8cd7eae 607
608To report a bug in Perl, use the program I<perlbug> which comes with
609Perl (if you can't get Perl to work, send mail to the address
f18956b7 610I<perlbug@perl.org> or I<perlbug@perl.com>). Reporting bugs through
e8cd7eae 611I<perlbug> feeds into the automated bug-tracking system, access to
f224927c 612which is provided through the web at http://bugs.perl.org/ . It
e8cd7eae 613often pays to check the archives of the perl5-porters mailing list to
614see whether the bug you're reporting has been reported before, and if
615so whether it was considered a bug. See above for the location of
616the searchable archives.
617
f224927c 618The CPAN testers ( http://testers.cpan.org/ ) are a group of
ba139f7d 619volunteers who test CPAN modules on a variety of platforms. Perl
620Smokers ( http://archives.develooper.com/daily-build@perl.org/ )
621automatically tests Perl source releases on platforms with various
622configurations. Both efforts welcome volunteers.
e8cd7eae 623
e8cd7eae 624It's a good idea to read and lurk for a while before chipping in.
625That way you'll get to see the dynamic of the conversations, learn the
626personalities of the players, and hopefully be better prepared to make
627a useful contribution when do you speak up.
628
629If after all this you still think you want to join the perl5-porters
f6c51b38 630mailing list, send mail to I<perl5-porters-subscribe@perl.org>. To
631unsubscribe, send mail to I<perl5-porters-unsubscribe@perl.org>.
e8cd7eae 632
a422fd2d 633To hack on the Perl guts, you'll need to read the following things:
634
635=over 3
636
637=item L<perlguts>
638
639This is of paramount importance, since it's the documentation of what
640goes where in the Perl source. Read it over a couple of times and it
641might start to make sense - don't worry if it doesn't yet, because the
642best way to study it is to read it in conjunction with poking at Perl
643source, and we'll do that later on.
644
645You might also want to look at Gisle Aas's illustrated perlguts -
646there's no guarantee that this will be absolutely up-to-date with the
647latest documentation in the Perl core, but the fundamentals will be
1577cd80 648right. ( http://gisle.aas.no/perl/illguts/ )
a422fd2d 649
650=item L<perlxstut> and L<perlxs>
651
652A working knowledge of XSUB programming is incredibly useful for core
653hacking; XSUBs use techniques drawn from the PP code, the portion of the
654guts that actually executes a Perl program. It's a lot gentler to learn
655those techniques from simple examples and explanation than from the core
656itself.
657
658=item L<perlapi>
659
660The documentation for the Perl API explains what some of the internal
661functions do, as well as the many macros used in the source.
662
663=item F<Porting/pumpkin.pod>
664
665This is a collection of words of wisdom for a Perl porter; some of it is
666only useful to the pumpkin holder, but most of it applies to anyone
667wanting to go about Perl development.
668
669=item The perl5-porters FAQ
670
7d7d5695 671This should be available from http://simon-cozens.org/writings/p5p-faq ;
672alternatively, you can get the FAQ emailed to you by sending mail to
673C<perl5-porters-faq@perl.org>. It contains hints on reading perl5-porters,
674information on how perl5-porters works and how Perl development in general
675works.
a422fd2d 676
677=back
678
679=head2 Finding Your Way Around
680
681Perl maintenance can be split into a number of areas, and certain people
682(pumpkins) will have responsibility for each area. These areas sometimes
683correspond to files or directories in the source kit. Among the areas are:
684
685=over 3
686
687=item Core modules
688
689Modules shipped as part of the Perl core live in the F<lib/> and F<ext/>
690subdirectories: F<lib/> is for the pure-Perl modules, and F<ext/>
691contains the core XS modules.
692
f7e1e956 693=item Tests
694
695There are tests for nearly all the modules, built-ins and major bits
696of functionality. Test files all have a .t suffix. Module tests live
697in the F<lib/> and F<ext/> directories next to the module being
698tested. Others live in F<t/>. See L<Writing a test>
699
a422fd2d 700=item Documentation
701
702Documentation maintenance includes looking after everything in the
703F<pod/> directory, (as well as contributing new documentation) and
704the documentation to the modules in core.
705
706=item Configure
707
708The configure process is the way we make Perl portable across the
709myriad of operating systems it supports. Responsibility for the
710configure, build and installation process, as well as the overall
711portability of the core code rests with the configure pumpkin - others
712help out with individual operating systems.
713
714The files involved are the operating system directories, (F<win32/>,
715F<os2/>, F<vms/> and so on) the shell scripts which generate F<config.h>
716and F<Makefile>, as well as the metaconfig files which generate
717F<Configure>. (metaconfig isn't included in the core distribution.)
718
719=item Interpreter
720
721And of course, there's the core of the Perl interpreter itself. Let's
722have a look at that in a little more detail.
723
724=back
725
726Before we leave looking at the layout, though, don't forget that
727F<MANIFEST> contains not only the file names in the Perl distribution,
728but short descriptions of what's in them, too. For an overview of the
729important files, try this:
730
731 perl -lne 'print if /^[^\/]+\.[ch]\s+/' MANIFEST
732
733=head2 Elements of the interpreter
734
735The work of the interpreter has two main stages: compiling the code
736into the internal representation, or bytecode, and then executing it.
737L<perlguts/Compiled code> explains exactly how the compilation stage
738happens.
739
740Here is a short breakdown of perl's operation:
741
742=over 3
743
744=item Startup
745
746The action begins in F<perlmain.c>. (or F<miniperlmain.c> for miniperl)
747This is very high-level code, enough to fit on a single screen, and it
748resembles the code found in L<perlembed>; most of the real action takes
749place in F<perl.c>
750
751First, F<perlmain.c> allocates some memory and constructs a Perl
752interpreter:
753
754 1 PERL_SYS_INIT3(&argc,&argv,&env);
755 2
756 3 if (!PL_do_undump) {
757 4 my_perl = perl_alloc();
758 5 if (!my_perl)
759 6 exit(1);
760 7 perl_construct(my_perl);
761 8 PL_perl_destruct_level = 0;
762 9 }
763
764Line 1 is a macro, and its definition is dependent on your operating
765system. Line 3 references C<PL_do_undump>, a global variable - all
766global variables in Perl start with C<PL_>. This tells you whether the
767current running program was created with the C<-u> flag to perl and then
768F<undump>, which means it's going to be false in any sane context.
769
770Line 4 calls a function in F<perl.c> to allocate memory for a Perl
771interpreter. It's quite a simple function, and the guts of it looks like
772this:
773
774 my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter));
775
776Here you see an example of Perl's system abstraction, which we'll see
777later: C<PerlMem_malloc> is either your system's C<malloc>, or Perl's
778own C<malloc> as defined in F<malloc.c> if you selected that option at
779configure time.
780
781Next, in line 7, we construct the interpreter; this sets up all the
782special variables that Perl needs, the stacks, and so on.
783
784Now we pass Perl the command line options, and tell it to go:
785
786 exitstatus = perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
787 if (!exitstatus) {
788 exitstatus = perl_run(my_perl);
789 }
790
791
792C<perl_parse> is actually a wrapper around C<S_parse_body>, as defined
793in F<perl.c>, which processes the command line options, sets up any
794statically linked XS modules, opens the program and calls C<yyparse> to
795parse it.
796
797=item Parsing
798
799The aim of this stage is to take the Perl source, and turn it into an op
800tree. We'll see what one of those looks like later. Strictly speaking,
801there's three things going on here.
802
803C<yyparse>, the parser, lives in F<perly.c>, although you're better off
804reading the original YACC input in F<perly.y>. (Yes, Virginia, there
805B<is> a YACC grammar for Perl!) The job of the parser is to take your
806code and `understand' it, splitting it into sentences, deciding which
807operands go with which operators and so on.
808
809The parser is nobly assisted by the lexer, which chunks up your input
810into tokens, and decides what type of thing each token is: a variable
811name, an operator, a bareword, a subroutine, a core function, and so on.
812The main point of entry to the lexer is C<yylex>, and that and its
813associated routines can be found in F<toke.c>. Perl isn't much like
814other computer languages; it's highly context sensitive at times, it can
815be tricky to work out what sort of token something is, or where a token
816ends. As such, there's a lot of interplay between the tokeniser and the
817parser, which can get pretty frightening if you're not used to it.
818
819As the parser understands a Perl program, it builds up a tree of
820operations for the interpreter to perform during execution. The routines
821which construct and link together the various operations are to be found
822in F<op.c>, and will be examined later.
823
824=item Optimization
825
826Now the parsing stage is complete, and the finished tree represents
827the operations that the Perl interpreter needs to perform to execute our
828program. Next, Perl does a dry run over the tree looking for
829optimisations: constant expressions such as C<3 + 4> will be computed
830now, and the optimizer will also see if any multiple operations can be
831replaced with a single one. For instance, to fetch the variable C<$foo>,
832instead of grabbing the glob C<*foo> and looking at the scalar
833component, the optimizer fiddles the op tree to use a function which
834directly looks up the scalar in question. The main optimizer is C<peep>
835in F<op.c>, and many ops have their own optimizing functions.
836
837=item Running
838
839Now we're finally ready to go: we have compiled Perl byte code, and all
840that's left to do is run it. The actual execution is done by the
841C<runops_standard> function in F<run.c>; more specifically, it's done by
842these three innocent looking lines:
843
844 while ((PL_op = CALL_FPTR(PL_op->op_ppaddr)(aTHX))) {
845 PERL_ASYNC_CHECK();
846 }
847
848You may be more comfortable with the Perl version of that:
849
850 PERL_ASYNC_CHECK() while $Perl::op = &{$Perl::op->{function}};
851
852Well, maybe not. Anyway, each op contains a function pointer, which
853stipulates the function which will actually carry out the operation.
854This function will return the next op in the sequence - this allows for
855things like C<if> which choose the next op dynamically at run time.
856The C<PERL_ASYNC_CHECK> makes sure that things like signals interrupt
857execution if required.
858
859The actual functions called are known as PP code, and they're spread
860between four files: F<pp_hot.c> contains the `hot' code, which is most
861often used and highly optimized, F<pp_sys.c> contains all the
862system-specific functions, F<pp_ctl.c> contains the functions which
863implement control structures (C<if>, C<while> and the like) and F<pp.c>
864contains everything else. These are, if you like, the C code for Perl's
865built-in functions and operators.
866
867=back
868
869=head2 Internal Variable Types
870
871You should by now have had a look at L<perlguts>, which tells you about
872Perl's internal variable types: SVs, HVs, AVs and the rest. If not, do
873that now.
874
875These variables are used not only to represent Perl-space variables, but
876also any constants in the code, as well as some structures completely
877internal to Perl. The symbol table, for instance, is an ordinary Perl
878hash. Your code is represented by an SV as it's read into the parser;
879any program files you call are opened via ordinary Perl filehandles, and
880so on.
881
882The core L<Devel::Peek|Devel::Peek> module lets us examine SVs from a
883Perl program. Let's see, for instance, how Perl treats the constant
884C<"hello">.
885
886 % perl -MDevel::Peek -e 'Dump("hello")'
887 1 SV = PV(0xa041450) at 0xa04ecbc
888 2 REFCNT = 1
889 3 FLAGS = (POK,READONLY,pPOK)
890 4 PV = 0xa0484e0 "hello"\0
891 5 CUR = 5
892 6 LEN = 6
893
894Reading C<Devel::Peek> output takes a bit of practise, so let's go
895through it line by line.
896
897Line 1 tells us we're looking at an SV which lives at C<0xa04ecbc> in
898memory. SVs themselves are very simple structures, but they contain a
899pointer to a more complex structure. In this case, it's a PV, a
900structure which holds a string value, at location C<0xa041450>. Line 2
901is the reference count; there are no other references to this data, so
902it's 1.
903
904Line 3 are the flags for this SV - it's OK to use it as a PV, it's a
905read-only SV (because it's a constant) and the data is a PV internally.
906Next we've got the contents of the string, starting at location
907C<0xa0484e0>.
908
909Line 5 gives us the current length of the string - note that this does
910B<not> include the null terminator. Line 6 is not the length of the
911string, but the length of the currently allocated buffer; as the string
912grows, Perl automatically extends the available storage via a routine
913called C<SvGROW>.
914
915You can get at any of these quantities from C very easily; just add
916C<Sv> to the name of the field shown in the snippet, and you've got a
917macro which will return the value: C<SvCUR(sv)> returns the current
918length of the string, C<SvREFCOUNT(sv)> returns the reference count,
919C<SvPV(sv, len)> returns the string itself with its length, and so on.
920More macros to manipulate these properties can be found in L<perlguts>.
921
922Let's take an example of manipulating a PV, from C<sv_catpvn>, in F<sv.c>
923
924 1 void
925 2 Perl_sv_catpvn(pTHX_ register SV *sv, register const char *ptr, register STRLEN len)
926 3 {
927 4 STRLEN tlen;
928 5 char *junk;
929
930 6 junk = SvPV_force(sv, tlen);
931 7 SvGROW(sv, tlen + len + 1);
932 8 if (ptr == junk)
933 9 ptr = SvPVX(sv);
934 10 Move(ptr,SvPVX(sv)+tlen,len,char);
935 11 SvCUR(sv) += len;
936 12 *SvEND(sv) = '\0';
937 13 (void)SvPOK_only_UTF8(sv); /* validate pointer */
938 14 SvTAINT(sv);
939 15 }
940
941This is a function which adds a string, C<ptr>, of length C<len> onto
942the end of the PV stored in C<sv>. The first thing we do in line 6 is
943make sure that the SV B<has> a valid PV, by calling the C<SvPV_force>
944macro to force a PV. As a side effect, C<tlen> gets set to the current
945value of the PV, and the PV itself is returned to C<junk>.
946
b1866b2d 947In line 7, we make sure that the SV will have enough room to accommodate
a422fd2d 948the old string, the new string and the null terminator. If C<LEN> isn't
949big enough, C<SvGROW> will reallocate space for us.
950
951Now, if C<junk> is the same as the string we're trying to add, we can
952grab the string directly from the SV; C<SvPVX> is the address of the PV
953in the SV.
954
955Line 10 does the actual catenation: the C<Move> macro moves a chunk of
956memory around: we move the string C<ptr> to the end of the PV - that's
957the start of the PV plus its current length. We're moving C<len> bytes
958of type C<char>. After doing so, we need to tell Perl we've extended the
959string, by altering C<CUR> to reflect the new length. C<SvEND> is a
960macro which gives us the end of the string, so that needs to be a
961C<"\0">.
962
963Line 13 manipulates the flags; since we've changed the PV, any IV or NV
964values will no longer be valid: if we have C<$a=10; $a.="6";> we don't
1e54db1a 965want to use the old IV of 10. C<SvPOK_only_utf8> is a special UTF-8-aware
a422fd2d 966version of C<SvPOK_only>, a macro which turns off the IOK and NOK flags
967and turns on POK. The final C<SvTAINT> is a macro which launders tainted
968data if taint mode is turned on.
969
970AVs and HVs are more complicated, but SVs are by far the most common
971variable type being thrown around. Having seen something of how we
972manipulate these, let's go on and look at how the op tree is
973constructed.
974
975=head2 Op Trees
976
977First, what is the op tree, anyway? The op tree is the parsed
978representation of your program, as we saw in our section on parsing, and
979it's the sequence of operations that Perl goes through to execute your
980program, as we saw in L</Running>.
981
982An op is a fundamental operation that Perl can perform: all the built-in
983functions and operators are ops, and there are a series of ops which
984deal with concepts the interpreter needs internally - entering and
985leaving a block, ending a statement, fetching a variable, and so on.
986
987The op tree is connected in two ways: you can imagine that there are two
988"routes" through it, two orders in which you can traverse the tree.
989First, parse order reflects how the parser understood the code, and
990secondly, execution order tells perl what order to perform the
991operations in.
992
993The easiest way to examine the op tree is to stop Perl after it has
994finished parsing, and get it to dump out the tree. This is exactly what
7d7d5695 995the compiler backends L<B::Terse|B::Terse>, L<B::Concise|B::Concise>
996and L<B::Debug|B::Debug> do.
a422fd2d 997
998Let's have a look at how Perl sees C<$a = $b + $c>:
999
1000 % perl -MO=Terse -e '$a=$b+$c'
1001 1 LISTOP (0x8179888) leave
1002 2 OP (0x81798b0) enter
1003 3 COP (0x8179850) nextstate
1004 4 BINOP (0x8179828) sassign
1005 5 BINOP (0x8179800) add [1]
1006 6 UNOP (0x81796e0) null [15]
1007 7 SVOP (0x80fafe0) gvsv GV (0x80fa4cc) *b
1008 8 UNOP (0x81797e0) null [15]
1009 9 SVOP (0x8179700) gvsv GV (0x80efeb0) *c
1010 10 UNOP (0x816b4f0) null [15]
1011 11 SVOP (0x816dcf0) gvsv GV (0x80fa460) *a
1012
1013Let's start in the middle, at line 4. This is a BINOP, a binary
1014operator, which is at location C<0x8179828>. The specific operator in
1015question is C<sassign> - scalar assignment - and you can find the code
1016which implements it in the function C<pp_sassign> in F<pp_hot.c>. As a
1017binary operator, it has two children: the add operator, providing the
1018result of C<$b+$c>, is uppermost on line 5, and the left hand side is on
1019line 10.
1020
1021Line 10 is the null op: this does exactly nothing. What is that doing
1022there? If you see the null op, it's a sign that something has been
1023optimized away after parsing. As we mentioned in L</Optimization>,
1024the optimization stage sometimes converts two operations into one, for
1025example when fetching a scalar variable. When this happens, instead of
1026rewriting the op tree and cleaning up the dangling pointers, it's easier
1027just to replace the redundant operation with the null op. Originally,
1028the tree would have looked like this:
1029
1030 10 SVOP (0x816b4f0) rv2sv [15]
1031 11 SVOP (0x816dcf0) gv GV (0x80fa460) *a
1032
1033That is, fetch the C<a> entry from the main symbol table, and then look
1034at the scalar component of it: C<gvsv> (C<pp_gvsv> into F<pp_hot.c>)
1035happens to do both these things.
1036
1037The right hand side, starting at line 5 is similar to what we've just
1038seen: we have the C<add> op (C<pp_add> also in F<pp_hot.c>) add together
1039two C<gvsv>s.
1040
1041Now, what's this about?
1042
1043 1 LISTOP (0x8179888) leave
1044 2 OP (0x81798b0) enter
1045 3 COP (0x8179850) nextstate
1046
1047C<enter> and C<leave> are scoping ops, and their job is to perform any
1048housekeeping every time you enter and leave a block: lexical variables
1049are tidied up, unreferenced variables are destroyed, and so on. Every
1050program will have those first three lines: C<leave> is a list, and its
1051children are all the statements in the block. Statements are delimited
1052by C<nextstate>, so a block is a collection of C<nextstate> ops, with
1053the ops to be performed for each statement being the children of
1054C<nextstate>. C<enter> is a single op which functions as a marker.
1055
1056That's how Perl parsed the program, from top to bottom:
1057
1058 Program
1059 |
1060 Statement
1061 |
1062 =
1063 / \
1064 / \
1065 $a +
1066 / \
1067 $b $c
1068
1069However, it's impossible to B<perform> the operations in this order:
1070you have to find the values of C<$b> and C<$c> before you add them
1071together, for instance. So, the other thread that runs through the op
1072tree is the execution order: each op has a field C<op_next> which points
1073to the next op to be run, so following these pointers tells us how perl
1074executes the code. We can traverse the tree in this order using
1075the C<exec> option to C<B::Terse>:
1076
1077 % perl -MO=Terse,exec -e '$a=$b+$c'
1078 1 OP (0x8179928) enter
1079 2 COP (0x81798c8) nextstate
1080 3 SVOP (0x81796c8) gvsv GV (0x80fa4d4) *b
1081 4 SVOP (0x8179798) gvsv GV (0x80efeb0) *c
1082 5 BINOP (0x8179878) add [1]
1083 6 SVOP (0x816dd38) gvsv GV (0x80fa468) *a
1084 7 BINOP (0x81798a0) sassign
1085 8 LISTOP (0x8179900) leave
1086
1087This probably makes more sense for a human: enter a block, start a
1088statement. Get the values of C<$b> and C<$c>, and add them together.
1089Find C<$a>, and assign one to the other. Then leave.
1090
1091The way Perl builds up these op trees in the parsing process can be
1092unravelled by examining F<perly.y>, the YACC grammar. Let's take the
1093piece we need to construct the tree for C<$a = $b + $c>
1094
1095 1 term : term ASSIGNOP term
1096 2 { $$ = newASSIGNOP(OPf_STACKED, $1, $2, $3); }
1097 3 | term ADDOP term
1098 4 { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
1099
1100If you're not used to reading BNF grammars, this is how it works: You're
1101fed certain things by the tokeniser, which generally end up in upper
1102case. Here, C<ADDOP>, is provided when the tokeniser sees C<+> in your
1103code. C<ASSIGNOP> is provided when C<=> is used for assigning. These are
1104`terminal symbols', because you can't get any simpler than them.
1105
1106The grammar, lines one and three of the snippet above, tells you how to
1107build up more complex forms. These complex forms, `non-terminal symbols'
1108are generally placed in lower case. C<term> here is a non-terminal
1109symbol, representing a single expression.
1110
1111The grammar gives you the following rule: you can make the thing on the
1112left of the colon if you see all the things on the right in sequence.
1113This is called a "reduction", and the aim of parsing is to completely
1114reduce the input. There are several different ways you can perform a
1115reduction, separated by vertical bars: so, C<term> followed by C<=>
1116followed by C<term> makes a C<term>, and C<term> followed by C<+>
1117followed by C<term> can also make a C<term>.
1118
1119So, if you see two terms with an C<=> or C<+>, between them, you can
1120turn them into a single expression. When you do this, you execute the
1121code in the block on the next line: if you see C<=>, you'll do the code
1122in line 2. If you see C<+>, you'll do the code in line 4. It's this code
1123which contributes to the op tree.
1124
1125 | term ADDOP term
1126 { $$ = newBINOP($2, 0, scalar($1), scalar($3)); }
1127
1128What this does is creates a new binary op, and feeds it a number of
1129variables. The variables refer to the tokens: C<$1> is the first token in
1130the input, C<$2> the second, and so on - think regular expression
1131backreferences. C<$$> is the op returned from this reduction. So, we
1132call C<newBINOP> to create a new binary operator. The first parameter to
1133C<newBINOP>, a function in F<op.c>, is the op type. It's an addition
1134operator, so we want the type to be C<ADDOP>. We could specify this
1135directly, but it's right there as the second token in the input, so we
1136use C<$2>. The second parameter is the op's flags: 0 means `nothing
1137special'. Then the things to add: the left and right hand side of our
1138expression, in scalar context.
1139
1140=head2 Stacks
1141
1142When perl executes something like C<addop>, how does it pass on its
1143results to the next op? The answer is, through the use of stacks. Perl
1144has a number of stacks to store things it's currently working on, and
1145we'll look at the three most important ones here.
1146
1147=over 3
1148
1149=item Argument stack
1150
1151Arguments are passed to PP code and returned from PP code using the
1152argument stack, C<ST>. The typical way to handle arguments is to pop
1153them off the stack, deal with them how you wish, and then push the result
1154back onto the stack. This is how, for instance, the cosine operator
1155works:
1156
1157 NV value;
1158 value = POPn;
1159 value = Perl_cos(value);
1160 XPUSHn(value);
1161
1162We'll see a more tricky example of this when we consider Perl's macros
1163below. C<POPn> gives you the NV (floating point value) of the top SV on
1164the stack: the C<$x> in C<cos($x)>. Then we compute the cosine, and push
1165the result back as an NV. The C<X> in C<XPUSHn> means that the stack
1166should be extended if necessary - it can't be necessary here, because we
1167know there's room for one more item on the stack, since we've just
1168removed one! The C<XPUSH*> macros at least guarantee safety.
1169
1170Alternatively, you can fiddle with the stack directly: C<SP> gives you
1171the first element in your portion of the stack, and C<TOP*> gives you
1172the top SV/IV/NV/etc. on the stack. So, for instance, to do unary
1173negation of an integer:
1174
1175 SETi(-TOPi);
1176
1177Just set the integer value of the top stack entry to its negation.
1178
1179Argument stack manipulation in the core is exactly the same as it is in
1180XSUBs - see L<perlxstut>, L<perlxs> and L<perlguts> for a longer
1181description of the macros used in stack manipulation.
1182
1183=item Mark stack
1184
1185I say `your portion of the stack' above because PP code doesn't
1186necessarily get the whole stack to itself: if your function calls
1187another function, you'll only want to expose the arguments aimed for the
1188called function, and not (necessarily) let it get at your own data. The
1189way we do this is to have a `virtual' bottom-of-stack, exposed to each
1190function. The mark stack keeps bookmarks to locations in the argument
1191stack usable by each function. For instance, when dealing with a tied
1192variable, (internally, something with `P' magic) Perl has to call
1193methods for accesses to the tied variables. However, we need to separate
1194the arguments exposed to the method to the argument exposed to the
1195original function - the store or fetch or whatever it may be. Here's how
1196the tied C<push> is implemented; see C<av_push> in F<av.c>:
1197
1198 1 PUSHMARK(SP);
1199 2 EXTEND(SP,2);
1200 3 PUSHs(SvTIED_obj((SV*)av, mg));
1201 4 PUSHs(val);
1202 5 PUTBACK;
1203 6 ENTER;
1204 7 call_method("PUSH", G_SCALAR|G_DISCARD);
1205 8 LEAVE;
1206 9 POPSTACK;
13a2d996 1207
a422fd2d 1208The lines which concern the mark stack are the first, fifth and last
1209lines: they save away, restore and remove the current position of the
1210argument stack.
1211
1212Let's examine the whole implementation, for practice:
1213
1214 1 PUSHMARK(SP);
1215
1216Push the current state of the stack pointer onto the mark stack. This is
1217so that when we've finished adding items to the argument stack, Perl
1218knows how many things we've added recently.
1219
1220 2 EXTEND(SP,2);
1221 3 PUSHs(SvTIED_obj((SV*)av, mg));
1222 4 PUSHs(val);
1223
1224We're going to add two more items onto the argument stack: when you have
1225a tied array, the C<PUSH> subroutine receives the object and the value
1226to be pushed, and that's exactly what we have here - the tied object,
1227retrieved with C<SvTIED_obj>, and the value, the SV C<val>.
1228
1229 5 PUTBACK;
1230
1231Next we tell Perl to make the change to the global stack pointer: C<dSP>
1232only gave us a local copy, not a reference to the global.
1233
1234 6 ENTER;
1235 7 call_method("PUSH", G_SCALAR|G_DISCARD);
1236 8 LEAVE;
1237
1238C<ENTER> and C<LEAVE> localise a block of code - they make sure that all
1239variables are tidied up, everything that has been localised gets
1240its previous value returned, and so on. Think of them as the C<{> and
1241C<}> of a Perl block.
1242
1243To actually do the magic method call, we have to call a subroutine in
1244Perl space: C<call_method> takes care of that, and it's described in
1245L<perlcall>. We call the C<PUSH> method in scalar context, and we're
1246going to discard its return value.
1247
1248 9 POPSTACK;
1249
1250Finally, we remove the value we placed on the mark stack, since we
1251don't need it any more.
1252
1253=item Save stack
1254
1255C doesn't have a concept of local scope, so perl provides one. We've
1256seen that C<ENTER> and C<LEAVE> are used as scoping braces; the save
1257stack implements the C equivalent of, for example:
1258
1259 {
1260 local $foo = 42;
1261 ...
1262 }
1263
1264See L<perlguts/Localising Changes> for how to use the save stack.
1265
1266=back
1267
1268=head2 Millions of Macros
1269
1270One thing you'll notice about the Perl source is that it's full of
1271macros. Some have called the pervasive use of macros the hardest thing
1272to understand, others find it adds to clarity. Let's take an example,
1273the code which implements the addition operator:
1274
1275 1 PP(pp_add)
1276 2 {
39644a26 1277 3 dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
a422fd2d 1278 4 {
1279 5 dPOPTOPnnrl_ul;
1280 6 SETn( left + right );
1281 7 RETURN;
1282 8 }
1283 9 }
1284
1285Every line here (apart from the braces, of course) contains a macro. The
1286first line sets up the function declaration as Perl expects for PP code;
1287line 3 sets up variable declarations for the argument stack and the
1288target, the return value of the operation. Finally, it tries to see if
1289the addition operation is overloaded; if so, the appropriate subroutine
1290is called.
1291
1292Line 5 is another variable declaration - all variable declarations start
1293with C<d> - which pops from the top of the argument stack two NVs (hence
1294C<nn>) and puts them into the variables C<right> and C<left>, hence the
1295C<rl>. These are the two operands to the addition operator. Next, we
1296call C<SETn> to set the NV of the return value to the result of adding
1297the two values. This done, we return - the C<RETURN> macro makes sure
1298that our return value is properly handled, and we pass the next operator
1299to run back to the main run loop.
1300
1301Most of these macros are explained in L<perlapi>, and some of the more
1302important ones are explained in L<perlxs> as well. Pay special attention
1303to L<perlguts/Background and PERL_IMPLICIT_CONTEXT> for information on
1304the C<[pad]THX_?> macros.
1305
52d59bef 1306=head2 The .i Targets
1307
1308You can expand the macros in a F<foo.c> file by saying
1309
1310 make foo.i
1311
1312which will expand the macros using cpp. Don't be scared by the results.
1313
a422fd2d 1314=head2 Poking at Perl
1315
1316To really poke around with Perl, you'll probably want to build Perl for
1317debugging, like this:
1318
1319 ./Configure -d -D optimize=-g
1320 make
1321
1322C<-g> is a flag to the C compiler to have it produce debugging
1323information which will allow us to step through a running program.
1324F<Configure> will also turn on the C<DEBUGGING> compilation symbol which
1325enables all the internal debugging code in Perl. There are a whole bunch
1326of things you can debug with this: L<perlrun> lists them all, and the
1327best way to find out about them is to play about with them. The most
1328useful options are probably
1329
1330 l Context (loop) stack processing
1331 t Trace execution
1332 o Method and overloading resolution
1333 c String/numeric conversions
1334
1335Some of the functionality of the debugging code can be achieved using XS
1336modules.
13a2d996 1337
a422fd2d 1338 -Dr => use re 'debug'
1339 -Dx => use O 'Debug'
1340
1341=head2 Using a source-level debugger
1342
1343If the debugging output of C<-D> doesn't help you, it's time to step
1344through perl's execution with a source-level debugger.
1345
1346=over 3
1347
1348=item *
1349
1350We'll use C<gdb> for our examples here; the principles will apply to any
1351debugger, but check the manual of the one you're using.
1352
1353=back
1354
1355To fire up the debugger, type
1356
1357 gdb ./perl
1358
1359You'll want to do that in your Perl source tree so the debugger can read
1360the source code. You should see the copyright message, followed by the
1361prompt.
1362
1363 (gdb)
1364
1365C<help> will get you into the documentation, but here are the most
1366useful commands:
1367
1368=over 3
1369
1370=item run [args]
1371
1372Run the program with the given arguments.
1373
1374=item break function_name
1375
1376=item break source.c:xxx
1377
1378Tells the debugger that we'll want to pause execution when we reach
cea6626f 1379either the named function (but see L<perlguts/Internal Functions>!) or the given
a422fd2d 1380line in the named source file.
1381
1382=item step
1383
1384Steps through the program a line at a time.
1385
1386=item next
1387
1388Steps through the program a line at a time, without descending into
1389functions.
1390
1391=item continue
1392
1393Run until the next breakpoint.
1394
1395=item finish
1396
1397Run until the end of the current function, then stop again.
1398
13a2d996 1399=item 'enter'
a422fd2d 1400
1401Just pressing Enter will do the most recent operation again - it's a
1402blessing when stepping through miles of source code.
1403
1404=item print
1405
1406Execute the given C code and print its results. B<WARNING>: Perl makes
52d59bef 1407heavy use of macros, and F<gdb> does not necessarily support macros
1408(see later L</"gdb macro support">). You'll have to substitute them
1409yourself, or to invoke cpp on the source code files
1410(see L</"The .i Targets">)
1411So, for instance, you can't say
a422fd2d 1412
1413 print SvPV_nolen(sv)
1414
1415but you have to say
1416
1417 print Perl_sv_2pv_nolen(sv)
1418
ffc145e8 1419=back
1420
a422fd2d 1421You may find it helpful to have a "macro dictionary", which you can
1422produce by saying C<cpp -dM perl.c | sort>. Even then, F<cpp> won't
52d59bef 1423recursively apply those macros for you.
1424
1425=head2 gdb macro support
a422fd2d 1426
52d59bef 1427Recent versions of F<gdb> have fairly good macro support, but
ea031e66 1428in order to use it you'll need to compile perl with macro definitions
1429included in the debugging information. Using F<gcc> version 3.1, this
1430means configuring with C<-Doptimize=-g3>. Other compilers might use a
1431different switch (if they support debugging macros at all).
1432
a422fd2d 1433=head2 Dumping Perl Data Structures
1434
1435One way to get around this macro hell is to use the dumping functions in
1436F<dump.c>; these work a little like an internal
1437L<Devel::Peek|Devel::Peek>, but they also cover OPs and other structures
1438that you can't get at from Perl. Let's take an example. We'll use the
1439C<$a = $b + $c> we used before, but give it a bit of context:
1440C<$b = "6XXXX"; $c = 2.3;>. Where's a good place to stop and poke around?
1441
1442What about C<pp_add>, the function we examined earlier to implement the
1443C<+> operator:
1444
1445 (gdb) break Perl_pp_add
1446 Breakpoint 1 at 0x46249f: file pp_hot.c, line 309.
1447
cea6626f 1448Notice we use C<Perl_pp_add> and not C<pp_add> - see L<perlguts/Internal Functions>.
a422fd2d 1449With the breakpoint in place, we can run our program:
1450
1451 (gdb) run -e '$b = "6XXXX"; $c = 2.3; $a = $b + $c'
1452
1453Lots of junk will go past as gdb reads in the relevant source files and
1454libraries, and then:
1455
1456 Breakpoint 1, Perl_pp_add () at pp_hot.c:309
39644a26 1457 309 dSP; dATARGET; tryAMAGICbin(add,opASSIGN);
a422fd2d 1458 (gdb) step
1459 311 dPOPTOPnnrl_ul;
1460 (gdb)
1461
1462We looked at this bit of code before, and we said that C<dPOPTOPnnrl_ul>
1463arranges for two C<NV>s to be placed into C<left> and C<right> - let's
1464slightly expand it:
1465
1466 #define dPOPTOPnnrl_ul NV right = POPn; \
1467 SV *leftsv = TOPs; \
1468 NV left = USE_LEFT(leftsv) ? SvNV(leftsv) : 0.0
1469
1470C<POPn> takes the SV from the top of the stack and obtains its NV either
1471directly (if C<SvNOK> is set) or by calling the C<sv_2nv> function.
1472C<TOPs> takes the next SV from the top of the stack - yes, C<POPn> uses
1473C<TOPs> - but doesn't remove it. We then use C<SvNV> to get the NV from
1474C<leftsv> in the same way as before - yes, C<POPn> uses C<SvNV>.
1475
1476Since we don't have an NV for C<$b>, we'll have to use C<sv_2nv> to
1477convert it. If we step again, we'll find ourselves there:
1478
1479 Perl_sv_2nv (sv=0xa0675d0) at sv.c:1669
1480 1669 if (!sv)
1481 (gdb)
1482
1483We can now use C<Perl_sv_dump> to investigate the SV:
1484
1485 SV = PV(0xa057cc0) at 0xa0675d0
1486 REFCNT = 1
1487 FLAGS = (POK,pPOK)
1488 PV = 0xa06a510 "6XXXX"\0
1489 CUR = 5
1490 LEN = 6
1491 $1 = void
1492
1493We know we're going to get C<6> from this, so let's finish the
1494subroutine:
1495
1496 (gdb) finish
1497 Run till exit from #0 Perl_sv_2nv (sv=0xa0675d0) at sv.c:1671
1498 0x462669 in Perl_pp_add () at pp_hot.c:311
1499 311 dPOPTOPnnrl_ul;
1500
1501We can also dump out this op: the current op is always stored in
1502C<PL_op>, and we can dump it with C<Perl_op_dump>. This'll give us
1503similar output to L<B::Debug|B::Debug>.
1504
1505 {
1506 13 TYPE = add ===> 14
1507 TARG = 1
1508 FLAGS = (SCALAR,KIDS)
1509 {
1510 TYPE = null ===> (12)
1511 (was rv2sv)
1512 FLAGS = (SCALAR,KIDS)
1513 {
1514 11 TYPE = gvsv ===> 12
1515 FLAGS = (SCALAR)
1516 GV = main::b
1517 }
1518 }
1519
10f58044 1520# finish this later #
a422fd2d 1521
1522=head2 Patching
1523
1524All right, we've now had a look at how to navigate the Perl sources and
1525some things you'll need to know when fiddling with them. Let's now get
1526on and create a simple patch. Here's something Larry suggested: if a
1527C<U> is the first active format during a C<pack>, (for example,
1528C<pack "U3C8", @stuff>) then the resulting string should be treated as
1e54db1a 1529UTF-8 encoded.
a422fd2d 1530
1531How do we prepare to fix this up? First we locate the code in question -
1532the C<pack> happens at runtime, so it's going to be in one of the F<pp>
1533files. Sure enough, C<pp_pack> is in F<pp.c>. Since we're going to be
1534altering this file, let's copy it to F<pp.c~>.
1535
a6ec74c1 1536[Well, it was in F<pp.c> when this tutorial was written. It has now been
1537split off with C<pp_unpack> to its own file, F<pp_pack.c>]
1538
a422fd2d 1539Now let's look over C<pp_pack>: we take a pattern into C<pat>, and then
1540loop over the pattern, taking each format character in turn into
1541C<datum_type>. Then for each possible format character, we swallow up
1542the other arguments in the pattern (a field width, an asterisk, and so
1543on) and convert the next chunk input into the specified format, adding
1544it onto the output SV C<cat>.
1545
1546How do we know if the C<U> is the first format in the C<pat>? Well, if
1547we have a pointer to the start of C<pat> then, if we see a C<U> we can
1548test whether we're still at the start of the string. So, here's where
1549C<pat> is set up:
1550
1551 STRLEN fromlen;
1552 register char *pat = SvPVx(*++MARK, fromlen);
1553 register char *patend = pat + fromlen;
1554 register I32 len;
1555 I32 datumtype;
1556 SV *fromstr;
1557
1558We'll have another string pointer in there:
1559
1560 STRLEN fromlen;
1561 register char *pat = SvPVx(*++MARK, fromlen);
1562 register char *patend = pat + fromlen;
1563 + char *patcopy;
1564 register I32 len;
1565 I32 datumtype;
1566 SV *fromstr;
1567
1568And just before we start the loop, we'll set C<patcopy> to be the start
1569of C<pat>:
1570
1571 items = SP - MARK;
1572 MARK++;
1573 sv_setpvn(cat, "", 0);
1574 + patcopy = pat;
1575 while (pat < patend) {
1576
1577Now if we see a C<U> which was at the start of the string, we turn on
1e54db1a 1578the C<UTF8> flag for the output SV, C<cat>:
a422fd2d 1579
1580 + if (datumtype == 'U' && pat==patcopy+1)
1581 + SvUTF8_on(cat);
1582 if (datumtype == '#') {
1583 while (pat < patend && *pat != '\n')
1584 pat++;
1585
1586Remember that it has to be C<patcopy+1> because the first character of
1587the string is the C<U> which has been swallowed into C<datumtype!>
1588
1589Oops, we forgot one thing: what if there are spaces at the start of the
1590pattern? C<pack(" U*", @stuff)> will have C<U> as the first active
1591character, even though it's not the first thing in the pattern. In this
1592case, we have to advance C<patcopy> along with C<pat> when we see spaces:
1593
1594 if (isSPACE(datumtype))
1595 continue;
1596
1597needs to become
1598
1599 if (isSPACE(datumtype)) {
1600 patcopy++;
1601 continue;
1602 }
1603
1604OK. That's the C part done. Now we must do two additional things before
1605this patch is ready to go: we've changed the behaviour of Perl, and so
1606we must document that change. We must also provide some more regression
1607tests to make sure our patch works and doesn't create a bug somewhere
1608else along the line.
1609
b23b8711 1610The regression tests for each operator live in F<t/op/>, and so we
1611make a copy of F<t/op/pack.t> to F<t/op/pack.t~>. Now we can add our
1612tests to the end. First, we'll test that the C<U> does indeed create
1613Unicode strings.
1614
1615t/op/pack.t has a sensible ok() function, but if it didn't we could
35c336e6 1616use the one from t/test.pl.
b23b8711 1617
35c336e6 1618 require './test.pl';
1619 plan( tests => 159 );
b23b8711 1620
1621so instead of this:
a422fd2d 1622
1623 print 'not ' unless "1.20.300.4000" eq sprintf "%vd", pack("U*",1,20,300,4000);
1624 print "ok $test\n"; $test++;
1625
35c336e6 1626we can write the more sensible (see L<Test::More> for a full
1627explanation of is() and other testing functions).
b23b8711 1628
35c336e6 1629 is( "1.20.300.4000", sprintf "%vd", pack("U*",1,20,300,4000),
812f5127 1630 "U* produces unicode" );
b23b8711 1631
a422fd2d 1632Now we'll test that we got that space-at-the-beginning business right:
1633
35c336e6 1634 is( "1.20.300.4000", sprintf "%vd", pack(" U*",1,20,300,4000),
812f5127 1635 " with spaces at the beginning" );
a422fd2d 1636
1637And finally we'll test that we don't make Unicode strings if C<U> is B<not>
1638the first active format:
1639
35c336e6 1640 isnt( v1.20.300.4000, sprintf "%vd", pack("C0U*",1,20,300,4000),
812f5127 1641 "U* not first isn't unicode" );
a422fd2d 1642
35c336e6 1643Mustn't forget to change the number of tests which appears at the top,
1644or else the automated tester will get confused. This will either look
1645like this:
a422fd2d 1646
35c336e6 1647 print "1..156\n";
1648
1649or this:
1650
1651 plan( tests => 156 );
a422fd2d 1652
1653We now compile up Perl, and run it through the test suite. Our new
1654tests pass, hooray!
1655
1656Finally, the documentation. The job is never done until the paperwork is
1657over, so let's describe the change we've just made. The relevant place
1658is F<pod/perlfunc.pod>; again, we make a copy, and then we'll insert
1659this text in the description of C<pack>:
1660
1661 =item *
1662
1663 If the pattern begins with a C<U>, the resulting string will be treated
1e54db1a 1664 as UTF-8-encoded Unicode. You can force UTF-8 encoding on in a string
1665 with an initial C<U0>, and the bytes that follow will be interpreted as
1666 Unicode characters. If you don't want this to happen, you can begin your
1667 pattern with C<C0> (or anything else) to force Perl not to UTF-8 encode your
a422fd2d 1668 string, and then follow this with a C<U*> somewhere in your pattern.
1669
1670All done. Now let's create the patch. F<Porting/patching.pod> tells us
1671that if we're making major changes, we should copy the entire directory
1672to somewhere safe before we begin fiddling, and then do
13a2d996 1673
a422fd2d 1674 diff -ruN old new > patch
1675
1676However, we know which files we've changed, and we can simply do this:
1677
1678 diff -u pp.c~ pp.c > patch
1679 diff -u t/op/pack.t~ t/op/pack.t >> patch
1680 diff -u pod/perlfunc.pod~ pod/perlfunc.pod >> patch
1681
1682We end up with a patch looking a little like this:
1683
1684 --- pp.c~ Fri Jun 02 04:34:10 2000
1685 +++ pp.c Fri Jun 16 11:37:25 2000
1686 @@ -4375,6 +4375,7 @@
1687 register I32 items;
1688 STRLEN fromlen;
1689 register char *pat = SvPVx(*++MARK, fromlen);
1690 + char *patcopy;
1691 register char *patend = pat + fromlen;
1692 register I32 len;
1693 I32 datumtype;
1694 @@ -4405,6 +4406,7 @@
1695 ...
1696
1697And finally, we submit it, with our rationale, to perl5-porters. Job
1698done!
1699
f7e1e956 1700=head2 Patching a core module
1701
1702This works just like patching anything else, with an extra
1703consideration. Many core modules also live on CPAN. If this is so,
1704patch the CPAN version instead of the core and send the patch off to
1705the module maintainer (with a copy to p5p). This will help the module
1706maintainer keep the CPAN version in sync with the core version without
1707constantly scanning p5p.
1708
acbe17fc 1709=head2 Adding a new function to the core
1710
1711If, as part of a patch to fix a bug, or just because you have an
1712especially good idea, you decide to add a new function to the core,
1713discuss your ideas on p5p well before you start work. It may be that
1714someone else has already attempted to do what you are considering and
1715can give lots of good advice or even provide you with bits of code
1716that they already started (but never finished).
1717
1718You have to follow all of the advice given above for patching. It is
1719extremely important to test any addition thoroughly and add new tests
1720to explore all boundary conditions that your new function is expected
1721to handle. If your new function is used only by one module (e.g. toke),
1722then it should probably be named S_your_function (for static); on the
210b36aa 1723other hand, if you expect it to accessible from other functions in
acbe17fc 1724Perl, you should name it Perl_your_function. See L<perlguts/Internal Functions>
1725for more details.
1726
1727The location of any new code is also an important consideration. Don't
1728just create a new top level .c file and put your code there; you would
1729have to make changes to Configure (so the Makefile is created properly),
1730as well as possibly lots of include files. This is strictly pumpking
1731business.
1732
1733It is better to add your function to one of the existing top level
1734source code files, but your choice is complicated by the nature of
1735the Perl distribution. Only the files that are marked as compiled
1736static are located in the perl executable. Everything else is located
1737in the shared library (or DLL if you are running under WIN32). So,
1738for example, if a function was only used by functions located in
1739toke.c, then your code can go in toke.c. If, however, you want to call
1740the function from universal.c, then you should put your code in another
1741location, for example util.c.
1742
1743In addition to writing your c-code, you will need to create an
1744appropriate entry in embed.pl describing your function, then run
1745'make regen_headers' to create the entries in the numerous header
1746files that perl needs to compile correctly. See L<perlguts/Internal Functions>
1747for information on the various options that you can set in embed.pl.
1748You will forget to do this a few (or many) times and you will get
1749warnings during the compilation phase. Make sure that you mention
1750this when you post your patch to P5P; the pumpking needs to know this.
1751
1752When you write your new code, please be conscious of existing code
884bad00 1753conventions used in the perl source files. See L<perlstyle> for
acbe17fc 1754details. Although most of the guidelines discussed seem to focus on
1755Perl code, rather than c, they all apply (except when they don't ;).
1756See also I<Porting/patching.pod> file in the Perl source distribution
1757for lots of details about both formatting and submitting patches of
1758your changes.
1759
1760Lastly, TEST TEST TEST TEST TEST any code before posting to p5p.
1761Test on as many platforms as you can find. Test as many perl
1762Configure options as you can (e.g. MULTIPLICITY). If you have
1763profiling or memory tools, see L<EXTERNAL TOOLS FOR DEBUGGING PERL>
210b36aa 1764below for how to use them to further test your code. Remember that
acbe17fc 1765most of the people on P5P are doing this on their own time and
1766don't have the time to debug your code.
f7e1e956 1767
1768=head2 Writing a test
1769
1770Every module and built-in function has an associated test file (or
1771should...). If you add or change functionality, you have to write a
1772test. If you fix a bug, you have to write a test so that bug never
1773comes back. If you alter the docs, it would be nice to test what the
1774new documentation says.
1775
1776In short, if you submit a patch you probably also have to patch the
1777tests.
1778
1779For modules, the test file is right next to the module itself.
1780F<lib/strict.t> tests F<lib/strict.pm>. This is a recent innovation,
1781so there are some snags (and it would be wonderful for you to brush
1782them out), but it basically works that way. Everything else lives in
1783F<t/>.
1784
1785=over 3
1786
1787=item F<t/base/>
1788
1789Testing of the absolute basic functionality of Perl. Things like
1790C<if>, basic file reads and writes, simple regexes, etc. These are
1791run first in the test suite and if any of them fail, something is
1792I<really> broken.
1793
1794=item F<t/cmd/>
1795
1796These test the basic control structures, C<if/else>, C<while>,
35c336e6 1797subroutines, etc.
f7e1e956 1798
1799=item F<t/comp/>
1800
1801Tests basic issues of how Perl parses and compiles itself.
1802
1803=item F<t/io/>
1804
1805Tests for built-in IO functions, including command line arguments.
1806
1807=item F<t/lib/>
1808
1809The old home for the module tests, you shouldn't put anything new in
1810here. There are still some bits and pieces hanging around in here
1811that need to be moved. Perhaps you could move them? Thanks!
1812
1813=item F<t/op/>
1814
1815Tests for perl's built in functions that don't fit into any of the
1816other directories.
1817
1818=item F<t/pod/>
1819
1820Tests for POD directives. There are still some tests for the Pod
1821modules hanging around in here that need to be moved out into F<lib/>.
1822
1823=item F<t/run/>
1824
1825Testing features of how perl actually runs, including exit codes and
1826handling of PERL* environment variables.
1827
244d9cb7 1828=item F<t/uni/>
1829
1830Tests for the core support of Unicode.
1831
1832=item F<t/win32/>
1833
1834Windows-specific tests.
1835
1836=item F<t/x2p>
1837
1838A test suite for the s2p converter.
1839
f7e1e956 1840=back
1841
1842The core uses the same testing style as the rest of Perl, a simple
1843"ok/not ok" run through Test::Harness, but there are a few special
1844considerations.
1845
35c336e6 1846There are three ways to write a test in the core. Test::More,
1847t/test.pl and ad hoc C<print $test ? "ok 42\n" : "not ok 42\n">. The
1848decision of which to use depends on what part of the test suite you're
1849working on. This is a measure to prevent a high-level failure (such
1850as Config.pm breaking) from causing basic functionality tests to fail.
1851
1852=over 4
1853
1854=item t/base t/comp
1855
1856Since we don't know if require works, or even subroutines, use ad hoc
1857tests for these two. Step carefully to avoid using the feature being
1858tested.
1859
1860=item t/cmd t/run t/io t/op
1861
1862Now that basic require() and subroutines are tested, you can use the
1863t/test.pl library which emulates the important features of Test::More
1864while using a minimum of core features.
1865
1866You can also conditionally use certain libraries like Config, but be
1867sure to skip the test gracefully if it's not there.
1868
1869=item t/lib ext lib
1870
1871Now that the core of Perl is tested, Test::More can be used. You can
1872also use the full suite of core modules in the tests.
1873
1874=back
f7e1e956 1875
1876When you say "make test" Perl uses the F<t/TEST> program to run the
1877test suite. All tests are run from the F<t/> directory, B<not> the
1878directory which contains the test. This causes some problems with the
1879tests in F<lib/>, so here's some opportunity for some patching.
1880
1881You must be triply conscious of cross-platform concerns. This usually
1882boils down to using File::Spec and avoiding things like C<fork()> and
1883C<system()> unless absolutely necessary.
1884
e018f8be 1885=head2 Special Make Test Targets
1886
1887There are various special make targets that can be used to test Perl
1888slightly differently than the standard "test" target. Not all them
1889are expected to give a 100% success rate. Many of them have several
1890aliases.
1891
1892=over 4
1893
1894=item coretest
1895
7d7d5695 1896Run F<perl> on all core tests (F<t/*> and F<lib/[a-z]*> pragma tests).
e018f8be 1897
1898=item test.deparse
1899
b26492ee 1900Run all the tests through B::Deparse. Not all tests will succeed.
1901
1902=item test.taintwarn
1903
1904Run all tests with the B<-t> command-line switch. Not all tests
1905are expected to succeed (until they're specifically fixed, of course).
e018f8be 1906
1907=item minitest
1908
1909Run F<miniperl> on F<t/base>, F<t/comp>, F<t/cmd>, F<t/run>, F<t/io>,
1910F<t/op>, and F<t/uni> tests.
1911
7a834142 1912=item test.valgrind check.valgrind utest.valgrind ucheck.valgrind
1913
1914(Only in Linux) Run all the tests using the memory leak + naughty
1915memory access tool "valgrind". The log files will be named
1916F<testname.valgrind>.
1917
e018f8be 1918=item test.third check.third utest.third ucheck.third
1919
1920(Only in Tru64) Run all the tests using the memory leak + naughty
1921memory access tool "Third Degree". The log files will be named
1922F<perl3.log.testname>.
1923
1924=item test.torture torturetest
1925
1926Run all the usual tests and some extra tests. As of Perl 5.8.0 the
244d9cb7 1927only extra tests are Abigail's JAPHs, F<t/japh/abigail.t>.
e018f8be 1928
1929You can also run the torture test with F<t/harness> by giving
1930C<-torture> argument to F<t/harness>.
1931
1932=item utest ucheck test.utf8 check.utf8
1933
1934Run all the tests with -Mutf8. Not all tests will succeed.
1935
244d9cb7 1936=item test_harness
1937
1938Run the test suite with the F<t/harness> controlling program, instead of
1939F<t/TEST>. F<t/harness> is more sophisticated, and uses the
1940L<Test::Harness> module, thus using this test target supposes that perl
1941mostly works. The main advantage for our purposes is that it prints a
00bf5cd9 1942detailed summary of failed tests at the end. Also, unlike F<t/TEST>, it
1943doesn't redirect stderr to stdout.
244d9cb7 1944
1945=back
1946
1947=head2 Running tests by hand
1948
1949You can run part of the test suite by hand by using one the following
1950commands from the F<t/> directory :
1951
1952 ./perl -I../lib TEST list-of-.t-files
1953
1954or
1955
1956 ./perl -I../lib harness list-of-.t-files
1957
1958(if you don't specify test scripts, the whole test suite will be run.)
1959
1960You can run an individual test by a command similar to
1961
1962 ./perl -I../lib patho/to/foo.t
1963
1964except that the harnesses set up some environment variables that may
1965affect the execution of the test :
1966
1967=over 4
1968
1969=item PERL_CORE=1
1970
1971indicates that we're running this test part of the perl core test suite.
1972This is useful for modules that have a dual life on CPAN.
1973
1974=item PERL_DESTRUCT_LEVEL=2
1975
1976is set to 2 if it isn't set already (see L</PERL_DESTRUCT_LEVEL>)
1977
1978=item PERL
1979
1980(used only by F<t/TEST>) if set, overrides the path to the perl executable
1981that should be used to run the tests (the default being F<./perl>).
1982
1983=item PERL_SKIP_TTY_TEST
1984
1985if set, tells to skip the tests that need a terminal. It's actually set
1986automatically by the Makefile, but can also be forced artificially by
1987running 'make test_notty'.
1988
e018f8be 1989=back
f7e1e956 1990
902b9dbf 1991=head1 EXTERNAL TOOLS FOR DEBUGGING PERL
1992
1993Sometimes it helps to use external tools while debugging and
1994testing Perl. This section tries to guide you through using
1995some common testing and debugging tools with Perl. This is
1996meant as a guide to interfacing these tools with Perl, not
1997as any kind of guide to the use of the tools themselves.
1998
a958818a 1999B<NOTE 1>: Running under memory debuggers such as Purify, valgrind, or
2000Third Degree greatly slows down the execution: seconds become minutes,
2001minutes become hours. For example as of Perl 5.8.1, the
2002ext/Encode/t/Unicode.t takes extraordinarily long to complete under
2003e.g. Purify, Third Degree, and valgrind. Under valgrind it takes more
2004than six hours, even on a snappy computer-- the said test must be
2005doing something that is quite unfriendly for memory debuggers. If you
2006don't feel like waiting, that you can simply kill away the perl
2007process.
2008
2009B<NOTE 2>: To minimize the number of memory leak false alarms (see
2010L</PERL_DESTRUCT_LEVEL> for more information), you have to have
2011environment variable PERL_DESTRUCT_LEVEL set to 2. The F<TEST>
2012and harness scripts do that automatically. But if you are running
2013some of the tests manually-- for csh-like shells:
2014
2015 setenv PERL_DESTRUCT_LEVEL 2
2016
2017and for Bourne-type shells:
2018
2019 PERL_DESTRUCT_LEVEL=2
2020 export PERL_DESTRUCT_LEVEL
2021
2022or in UNIXy environments you can also use the C<env> command:
2023
2024 env PERL_DESTRUCT_LEVEL=2 valgrind ./perl -Ilib ...
a1b65709 2025
37c0adeb 2026B<NOTE 3>: There are known memory leaks when there are compile-time
2027errors within eval or require, seeing C<S_doeval> in the call stack
2028is a good sign of these. Fixing these leaks is non-trivial,
2029unfortunately, but they must be fixed eventually.
2030
902b9dbf 2031=head2 Rational Software's Purify
2032
2033Purify is a commercial tool that is helpful in identifying
2034memory overruns, wild pointers, memory leaks and other such
2035badness. Perl must be compiled in a specific way for
2036optimal testing with Purify. Purify is available under
2037Windows NT, Solaris, HP-UX, SGI, and Siemens Unix.
2038
902b9dbf 2039=head2 Purify on Unix
2040
2041On Unix, Purify creates a new Perl binary. To get the most
2042benefit out of Purify, you should create the perl to Purify
2043using:
2044
2045 sh Configure -Accflags=-DPURIFY -Doptimize='-g' \
2046 -Uusemymalloc -Dusemultiplicity
2047
2048where these arguments mean:
2049
2050=over 4
2051
2052=item -Accflags=-DPURIFY
2053
2054Disables Perl's arena memory allocation functions, as well as
2055forcing use of memory allocation functions derived from the
2056system malloc.
2057
2058=item -Doptimize='-g'
2059
2060Adds debugging information so that you see the exact source
2061statements where the problem occurs. Without this flag, all
2062you will see is the source filename of where the error occurred.
2063
2064=item -Uusemymalloc
2065
2066Disable Perl's malloc so that Purify can more closely monitor
2067allocations and leaks. Using Perl's malloc will make Purify
2068report most leaks in the "potential" leaks category.
2069
2070=item -Dusemultiplicity
2071
2072Enabling the multiplicity option allows perl to clean up
2073thoroughly when the interpreter shuts down, which reduces the
2074number of bogus leak reports from Purify.
2075
2076=back
2077
2078Once you've compiled a perl suitable for Purify'ing, then you
2079can just:
2080
2081 make pureperl
2082
2083which creates a binary named 'pureperl' that has been Purify'ed.
2084This binary is used in place of the standard 'perl' binary
2085when you want to debug Perl memory problems.
2086
2087As an example, to show any memory leaks produced during the
2088standard Perl testset you would create and run the Purify'ed
2089perl as:
2090
2091 make pureperl
2092 cd t
2093 ../pureperl -I../lib harness
2094
2095which would run Perl on test.pl and report any memory problems.
2096
2097Purify outputs messages in "Viewer" windows by default. If
2098you don't have a windowing environment or if you simply
2099want the Purify output to unobtrusively go to a log file
2100instead of to the interactive window, use these following
2101options to output to the log file "perl.log":
2102
2103 setenv PURIFYOPTIONS "-chain-length=25 -windows=no \
2104 -log-file=perl.log -append-logfile=yes"
2105
2106If you plan to use the "Viewer" windows, then you only need this option:
2107
2108 setenv PURIFYOPTIONS "-chain-length=25"
2109
c406981e 2110In Bourne-type shells:
2111
98631ff8 2112 PURIFYOPTIONS="..."
2113 export PURIFYOPTIONS
c406981e 2114
2115or if you have the "env" utility:
2116
98631ff8 2117 env PURIFYOPTIONS="..." ../pureperl ...
c406981e 2118
902b9dbf 2119=head2 Purify on NT
2120
2121Purify on Windows NT instruments the Perl binary 'perl.exe'
2122on the fly. There are several options in the makefile you
2123should change to get the most use out of Purify:
2124
2125=over 4
2126
2127=item DEFINES
2128
2129You should add -DPURIFY to the DEFINES line so the DEFINES
2130line looks something like:
2131
2132 DEFINES = -DWIN32 -D_CONSOLE -DNO_STRICT $(CRYPT_FLAG) -DPURIFY=1
2133
2134to disable Perl's arena memory allocation functions, as
2135well as to force use of memory allocation functions derived
2136from the system malloc.
2137
2138=item USE_MULTI = define
2139
2140Enabling the multiplicity option allows perl to clean up
2141thoroughly when the interpreter shuts down, which reduces the
2142number of bogus leak reports from Purify.
2143
2144=item #PERL_MALLOC = define
2145
2146Disable Perl's malloc so that Purify can more closely monitor
2147allocations and leaks. Using Perl's malloc will make Purify
2148report most leaks in the "potential" leaks category.
2149
2150=item CFG = Debug
2151
2152Adds debugging information so that you see the exact source
2153statements where the problem occurs. Without this flag, all
2154you will see is the source filename of where the error occurred.
2155
2156=back
2157
2158As an example, to show any memory leaks produced during the
2159standard Perl testset you would create and run Purify as:
2160
2161 cd win32
2162 make
2163 cd ../t
2164 purify ../perl -I../lib harness
2165
2166which would instrument Perl in memory, run Perl on test.pl,
2167then finally report any memory problems.
2168
7a834142 2169=head2 valgrind
2170
2171The excellent valgrind tool can be used to find out both memory leaks
2172and illegal memory accesses. As of August 2003 it unfortunately works
2173only on x86 (ELF) Linux. The special "test.valgrind" target can be used
d44161bf 2174to run the tests under valgrind. Found errors and memory leaks are
2175logged in files named F<test.valgrind>.
2176
2177As system libraries (most notably glibc) are also triggering errors,
2178valgrind allows to suppress such errors using suppression files. The
2179default suppression file that comes with valgrind already catches a lot
2180of them. Some additional suppressions are defined in F<t/perl.supp>.
7a834142 2181
2182To get valgrind and for more information see
2183
2184 http://developer.kde.org/~sewardj/
2185
f134cc4e 2186=head2 Compaq's/Digital's/HP's Third Degree
09187cb1 2187
2188Third Degree is a tool for memory leak detection and memory access checks.
2189It is one of the many tools in the ATOM toolkit. The toolkit is only
2190available on Tru64 (formerly known as Digital UNIX formerly known as
2191DEC OSF/1).
2192
2193When building Perl, you must first run Configure with -Doptimize=-g
2194and -Uusemymalloc flags, after that you can use the make targets
51a35ef1 2195"perl.third" and "test.third". (What is required is that Perl must be
2196compiled using the C<-g> flag, you may need to re-Configure.)
09187cb1 2197
64cea5fd 2198The short story is that with "atom" you can instrument the Perl
83f0ef60 2199executable to create a new executable called F<perl.third>. When the
4ae3d70a 2200instrumented executable is run, it creates a log of dubious memory
83f0ef60 2201traffic in file called F<perl.3log>. See the manual pages of atom and
4ae3d70a 2202third for more information. The most extensive Third Degree
2203documentation is available in the Compaq "Tru64 UNIX Programmer's
2204Guide", chapter "Debugging Programs with Third Degree".
64cea5fd 2205
9c54ecba 2206The "test.third" leaves a lot of files named F<foo_bar.3log> in the t/
64cea5fd 2207subdirectory. There is a problem with these files: Third Degree is so
2208effective that it finds problems also in the system libraries.
9c54ecba 2209Therefore you should used the Porting/thirdclean script to cleanup
2210the F<*.3log> files.
64cea5fd 2211
2212There are also leaks that for given certain definition of a leak,
2213aren't. See L</PERL_DESTRUCT_LEVEL> for more information.
2214
2215=head2 PERL_DESTRUCT_LEVEL
2216
a958818a 2217If you want to run any of the tests yourself manually using e.g.
2218valgrind, or the pureperl or perl.third executables, please note that
2219by default perl B<does not> explicitly cleanup all the memory it has
2220allocated (such as global memory arenas) but instead lets the exit()
2221of the whole program "take care" of such allocations, also known as
2222"global destruction of objects".
64cea5fd 2223
2224There is a way to tell perl to do complete cleanup: set the
2225environment variable PERL_DESTRUCT_LEVEL to a non-zero value.
2226The t/TEST wrapper does set this to 2, and this is what you
2227need to do too, if you don't want to see the "global leaks":
1f56d61a 2228For example, for "third-degreed" Perl:
64cea5fd 2229
1f56d61a 2230 env PERL_DESTRUCT_LEVEL=2 ./perl.third -Ilib t/foo/bar.t
09187cb1 2231
414f2397 2232(Note: the mod_perl apache module uses also this environment variable
2233for its own purposes and extended its semantics. Refer to the mod_perl
287a822c 2234documentation for more information. Also, spawned threads do the
2235equivalent of setting this variable to the value 1.)
5a6c59ef 2236
2237If, at the end of a run you get the message I<N scalars leaked>, you can
2238recompile with C<-DDEBUG_LEAKING_SCALARS>, which will cause
2239the addresses of all those leaked SVs to be dumped; it also converts
2240C<new_SV()> from a macro into a real function, so you can use your
2241favourite debugger to discover where those pesky SVs were allocated.
414f2397 2242
51a35ef1 2243=head2 Profiling
2244
2245Depending on your platform there are various of profiling Perl.
2246
2247There are two commonly used techniques of profiling executables:
10f58044 2248I<statistical time-sampling> and I<basic-block counting>.
51a35ef1 2249
2250The first method takes periodically samples of the CPU program
2251counter, and since the program counter can be correlated with the code
2252generated for functions, we get a statistical view of in which
2253functions the program is spending its time. The caveats are that very
2254small/fast functions have lower probability of showing up in the
2255profile, and that periodically interrupting the program (this is
2256usually done rather frequently, in the scale of milliseconds) imposes
2257an additional overhead that may skew the results. The first problem
2258can be alleviated by running the code for longer (in general this is a
2259good idea for profiling), the second problem is usually kept in guard
2260by the profiling tools themselves.
2261
10f58044 2262The second method divides up the generated code into I<basic blocks>.
51a35ef1 2263Basic blocks are sections of code that are entered only in the
2264beginning and exited only at the end. For example, a conditional jump
2265starts a basic block. Basic block profiling usually works by
10f58044 2266I<instrumenting> the code by adding I<enter basic block #nnnn>
51a35ef1 2267book-keeping code to the generated code. During the execution of the
2268code the basic block counters are then updated appropriately. The
2269caveat is that the added extra code can skew the results: again, the
2270profiling tools usually try to factor their own effects out of the
2271results.
2272
83f0ef60 2273=head2 Gprof Profiling
2274
51a35ef1 2275gprof is a profiling tool available in many UNIX platforms,
2276it uses F<statistical time-sampling>.
83f0ef60 2277
2278You can build a profiled version of perl called "perl.gprof" by
51a35ef1 2279invoking the make target "perl.gprof" (What is required is that Perl
2280must be compiled using the C<-pg> flag, you may need to re-Configure).
2281Running the profiled version of Perl will create an output file called
2282F<gmon.out> is created which contains the profiling data collected
2283during the execution.
83f0ef60 2284
2285The gprof tool can then display the collected data in various ways.
2286Usually gprof understands the following options:
2287
2288=over 4
2289
2290=item -a
2291
2292Suppress statically defined functions from the profile.
2293
2294=item -b
2295
2296Suppress the verbose descriptions in the profile.
2297
2298=item -e routine
2299
2300Exclude the given routine and its descendants from the profile.
2301
2302=item -f routine
2303
2304Display only the given routine and its descendants in the profile.
2305
2306=item -s
2307
2308Generate a summary file called F<gmon.sum> which then may be given
2309to subsequent gprof runs to accumulate data over several runs.
2310
2311=item -z
2312
2313Display routines that have zero usage.
2314
2315=back
2316
2317For more detailed explanation of the available commands and output
2318formats, see your own local documentation of gprof.
2319
51a35ef1 2320=head2 GCC gcov Profiling
2321
10f58044 2322Starting from GCC 3.0 I<basic block profiling> is officially available
51a35ef1 2323for the GNU CC.
2324
2325You can build a profiled version of perl called F<perl.gcov> by
2326invoking the make target "perl.gcov" (what is required that Perl must
2327be compiled using gcc with the flags C<-fprofile-arcs
2328-ftest-coverage>, you may need to re-Configure).
2329
2330Running the profiled version of Perl will cause profile output to be
2331generated. For each source file an accompanying ".da" file will be
2332created.
2333
2334To display the results you use the "gcov" utility (which should
2335be installed if you have gcc 3.0 or newer installed). F<gcov> is
2336run on source code files, like this
2337
2338 gcov sv.c
2339
2340which will cause F<sv.c.gcov> to be created. The F<.gcov> files
2341contain the source code annotated with relative frequencies of
2342execution indicated by "#" markers.
2343
2344Useful options of F<gcov> include C<-b> which will summarise the
2345basic block, branch, and function call coverage, and C<-c> which
2346instead of relative frequencies will use the actual counts. For
2347more information on the use of F<gcov> and basic block profiling
2348with gcc, see the latest GNU CC manual, as of GCC 3.0 see
2349
2350 http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc.html
2351
2352and its section titled "8. gcov: a Test Coverage Program"
2353
2354 http://gcc.gnu.org/onlinedocs/gcc-3.0/gcc_8.html#SEC132
2355
4ae3d70a 2356=head2 Pixie Profiling
2357
51a35ef1 2358Pixie is a profiling tool available on IRIX and Tru64 (aka Digital
2359UNIX aka DEC OSF/1) platforms. Pixie does its profiling using
10f58044 2360I<basic-block counting>.
4ae3d70a 2361
83f0ef60 2362You can build a profiled version of perl called F<perl.pixie> by
51a35ef1 2363invoking the make target "perl.pixie" (what is required is that Perl
2364must be compiled using the C<-g> flag, you may need to re-Configure).
2365
2366In Tru64 a file called F<perl.Addrs> will also be silently created,
2367this file contains the addresses of the basic blocks. Running the
2368profiled version of Perl will create a new file called "perl.Counts"
2369which contains the counts for the basic block for that particular
2370program execution.
4ae3d70a 2371
51a35ef1 2372To display the results you use the F<prof> utility. The exact
4ae3d70a 2373incantation depends on your operating system, "prof perl.Counts" in
2374IRIX, and "prof -pixie -all -L. perl" in Tru64.
2375
6c41479b 2376In IRIX the following prof options are available:
2377
2378=over 4
2379
2380=item -h
2381
2382Reports the most heavily used lines in descending order of use.
6e36760b 2383Useful for finding the hotspot lines.
6c41479b 2384
2385=item -l
2386
2387Groups lines by procedure, with procedures sorted in descending order of use.
2388Within a procedure, lines are listed in source order.
6e36760b 2389Useful for finding the hotspots of procedures.
6c41479b 2390
2391=back
2392
2393In Tru64 the following options are available:
2394
2395=over 4
2396
3958b146 2397=item -p[rocedures]
6c41479b 2398
3958b146 2399Procedures sorted in descending order by the number of cycles executed
6e36760b 2400in each procedure. Useful for finding the hotspot procedures.
6c41479b 2401(This is the default option.)
2402
24000d2f 2403=item -h[eavy]
6c41479b 2404
6e36760b 2405Lines sorted in descending order by the number of cycles executed in
2406each line. Useful for finding the hotspot lines.
6c41479b 2407
24000d2f 2408=item -i[nvocations]
6c41479b 2409
6e36760b 2410The called procedures are sorted in descending order by number of calls
2411made to the procedures. Useful for finding the most used procedures.
6c41479b 2412
24000d2f 2413=item -l[ines]
6c41479b 2414
2415Grouped by procedure, sorted by cycles executed per procedure.
6e36760b 2416Useful for finding the hotspots of procedures.
6c41479b 2417
2418=item -testcoverage
2419
2420The compiler emitted code for these lines, but the code was unexecuted.
2421
24000d2f 2422=item -z[ero]
6c41479b 2423
2424Unexecuted procedures.
2425
aa500c9e 2426=back
6c41479b 2427
2428For further information, see your system's manual pages for pixie and prof.
4ae3d70a 2429
b8ddf6b3 2430=head2 Miscellaneous tricks
2431
2432=over 4
2433
2434=item *
2435
cc177e1a 2436Those debugging perl with the DDD frontend over gdb may find the
b8ddf6b3 2437following useful:
2438
2439You can extend the data conversion shortcuts menu, so for example you
2440can display an SV's IV value with one click, without doing any typing.
2441To do that simply edit ~/.ddd/init file and add after:
2442
2443 ! Display shortcuts.
2444 Ddd*gdbDisplayShortcuts: \
2445 /t () // Convert to Bin\n\
2446 /d () // Convert to Dec\n\
2447 /x () // Convert to Hex\n\
2448 /o () // Convert to Oct(\n\
2449
2450the following two lines:
2451
2452 ((XPV*) (())->sv_any )->xpv_pv // 2pvx\n\
2453 ((XPVIV*) (())->sv_any )->xiv_iv // 2ivx
2454
2455so now you can do ivx and pvx lookups or you can plug there the
2456sv_peek "conversion":
2457
2458 Perl_sv_peek(my_perl, (SV*)()) // sv_peek
2459
2460(The my_perl is for threaded builds.)
2461Just remember that every line, but the last one, should end with \n\
2462
2463Alternatively edit the init file interactively via:
24643rd mouse button -> New Display -> Edit Menu
2465
2466Note: you can define up to 20 conversion shortcuts in the gdb
2467section.
2468
9965345d 2469=item *
2470
2471If you see in a debugger a memory area mysteriously full of 0xabababab,
2472you may be seeing the effect of the Poison() macro, see L<perlclib>.
2473
b8ddf6b3 2474=back
2475
a422fd2d 2476=head2 CONCLUSION
2477
2478We've had a brief look around the Perl source, an overview of the stages
2479F<perl> goes through when it's running your code, and how to use a
902b9dbf 2480debugger to poke at the Perl guts. We took a very simple problem and
2481demonstrated how to solve it fully - with documentation, regression
2482tests, and finally a patch for submission to p5p. Finally, we talked
2483about how to use external tools to debug and test Perl.
a422fd2d 2484
2485I'd now suggest you read over those references again, and then, as soon
2486as possible, get your hands dirty. The best way to learn is by doing,
2487so:
2488
2489=over 3
2490
2491=item *
2492
2493Subscribe to perl5-porters, follow the patches and try and understand
2494them; don't be afraid to ask if there's a portion you're not clear on -
2495who knows, you may unearth a bug in the patch...
2496
2497=item *
2498
2499Keep up to date with the bleeding edge Perl distributions and get
2500familiar with the changes. Try and get an idea of what areas people are
2501working on and the changes they're making.
2502
2503=item *
2504
3e148164 2505Do read the README associated with your operating system, e.g. README.aix
a1f349fd 2506on the IBM AIX OS. Don't hesitate to supply patches to that README if
2507you find anything missing or changed over a new OS release.
2508
2509=item *
2510
a422fd2d 2511Find an area of Perl that seems interesting to you, and see if you can
2512work out how it works. Scan through the source, and step over it in the
2513debugger. Play, poke, investigate, fiddle! You'll probably get to
2514understand not just your chosen area but a much wider range of F<perl>'s
2515activity as well, and probably sooner than you'd think.
2516
2517=back
2518
2519=over 3
2520
2521=item I<The Road goes ever on and on, down from the door where it began.>
2522
2523=back
2524
2525If you can do these things, you've started on the long road to Perl porting.
2526Thanks for wanting to help make Perl better - and happy hacking!
2527
e8cd7eae 2528=head1 AUTHOR
2529
2530This document was written by Nathan Torkington, and is maintained by
2531the perl5-porters mailing list.
2532