My first exploration of Perl’s internals was more of a toe-dip than a high gainer. Back in 1988, I wanted to use Perl 2.0 on a Xenix/286 system, so I ported it. Over the next few years I contributed some minor patches, and one major patch: support for System V interprocess communication (the
msg*, sem*, and
Cut to October 1996. Occupied with other matters, Larry Wall left active development to other interested people. Perl 5.003 was the current version. Andy Dougherty released seven development “subversions” (5.003_01 through 5.003_07), but was unable to continue. Patches started piling up, with no one to collect and order them. Finally, seeing an opportunity to help Perl development move forward, I volunteered to collect patches, issue a few more subversions, and slap a “Perl 5.004” label on the result. I figured it would be a quick (if not easy) job.
7 months and 45 subversions later, I finally put Perl 5.004 to bed. It wasn’t quick, and it certainly wasn’t easy, but it was educational. I learned about Perl’s internals the hard way, going backwards and forwards through the code, discovering how it worked so that my patches would actually fix bugs instead of making new ones.
Perl is a complex programming system. Just as humans are single individuals, but can be analyzed usefully in parts, so Perl can be dissected for analysis. What follows is a description of Perl’s major organs. ...