Chapter 18. Modules As Programs
Perl has excellent tools for creating, testing, and distributing modules. On the other hand, Perl’s good for writing standalone programs that don’t need anything else to be useful. I want my programs to be able 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 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
execute 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 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 so I can run it to see
nothing happen:
$ perldoc -l Astro::MoonPhase /usr/local/lib/perl5/site_perl/5.8.7/Astro/MoonPhase.pm $ perl /usr/local/lib/perl5/site_perl/5.8.7/Astro/MoonPhase.pm ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access