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