Chapter 17. Modules as Programs
Perl has excellent tools for creating, testing, and distributing modules. Perl’s also good for writing standalone programs that don’t need anything else to be useful, but we don’t have tools for standalone programs as good (or at all) as those for modules. I want my programs to use the module development tools and be testable in the same way as modules. To do this, I restructure my programs to turn them into modulinos.
The main Thing
Other languages aren’t as DWIM (Do What I Mean) as Perl, and they make us
create a top-level subroutine that serves as the starting point for the
application. In C or Java, I have to name this subroutine main
:
/* hello_world.c */ #include <stdio.h> int main ( void ) { printf( "Hello C World!\n" ); return 0; }
Perl, in its desire to be helpful, already knows this and does it
for me. My entire program is the main
routine, which is how Perl ends up with the default package main
. When I run my Perl program, Perl starts to
compile the code it contains as if I had wrapped my main
subroutine around the entire file.
In a module most of the code is in methods or subroutines, so,
unlike a program, most of it doesn’t immediately execute. I have to call a
subroutine to make something happen. Try that with your favorite module;
run it from the command line. In most cases, you won’t see anything
happen. I can use perldoc’s -l
switch to locate the actual module
file:
% perldoc -l Astro::MoonPhase
/perls/perl-5.18.0/lib/site_perl/5.18.0/Astro/Sunrise.pm ...
Get Mastering Perl, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.