Perl Tutorials - Herong's Tutorial Examples
Dr. Herong Yang, Version 5.00

Defining Your Own Perl Module

This section provides a tutorial example on how to define your own Perl module with its own name space and stored in a separate script file named as *.pm.

Perl Module - A special source code file that:

  • Contains variables and subroutines related to a single subject.
  • Can be used as an include file.
  • Has its own name space.
  • Has a file name matches the name space name. File extension should be .pm.

Here is a dummy example of Perl module, MyModule.pm,

#- MyModule.pm
#- Copyright (c) 1995 by Dr. Herong Yang, http://www.herongyang.com/
#
   package MyModule;
   sub BEGIN {
      print("Printing in BEGIN of ",__PACKAGE__,"...\n");
      $begin = "Begin";
   }   	
   sub CHECK {
      print("Printing in CHECK of ",__PACKAGE__,"...\n");
      $check = "Check";
   }   	
   sub INIT {
      print("Printing in INIT of ",__PACKAGE__,"...\n");
      $init = "Init";
   }
   sub END {
      print("Printing in END of ",__PACKAGE__,"...\n");
      $end = "End";
   }
   print("Printing from MyModule.pm...\n");
sub myModuleSub {
   print("Printing from myModuleSub()...\n");
}
1;   

And a dummy test script, ModuleTest.pl,

#- ModuleTest.pl
#- Copyright (c) 1995 by Dr. Herong Yang, http://www.herongyang.com/
#
   print("Printing from ModuleTest.pl before MyModule...\n");
   require MyModule;
   print("Printing from ModuleTest.pl after MyModule...\n");
   print("MyModule::begin = $MyModule::begin\n");
   print("MyModule::check = $MyModule::check\n");
   print("MyModule::init = $MyModule::init\n");
   print("MyModule::end = $MyModule::end\n");
   &MyModule::myModuleSub();
   exit;

Here is the output of the test script:

Printing from ModuleTest.pl before MyModule...
Printing in BEGIN of MyModule...
Printing from MyModule.pm...
Printing from ModuleTest.pl after MyModule...
MyModule::begin = Begin
MyModule::check =
MyModule::init =
MyModule::end =
Printing from myModuleSub()...
Printing in END of MyModule...

A couple of notes here:

  • If you use bare word in the require function, it will automatically append .pm, and use it as the module file name.
  • The output shows that CHECK() and INIT() were not executed. I don't know why.
  • The output shows that BEGIN() in MyModule.pm was executed during the compilation process of MyModule.pm, but that was in the middle of the execution of the calling program, ModuleTest.pl.
  • The output also shows that END() in MyModule.pm was not executed at the end of the execution process of MyModule.pm. It was executed at the end of the entire execution - end of ModuleTest.pl.

Sections in This Chapter

Including Script Codes from Other Files

do() Function - Including Script Files

require() Function - Including Script Files

"package" Statement - Switching Name Space

BEGIN(), CHECK(), INIT() and END() Functions

Defining Your Own Perl Module

CalendarModule.pm - A Sample Perl Module

Dr. Herong Yang, updated in 2008
Defining Your Own Perl Module