Example: Module Template

Following is the skeleton of a module. If you want to write a module of your own, you can copy this and customize it.

package Some::Module; # must live in Some/Module.pm use strict; require Exporter; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); # set the version for version checking $VERSION = 0.01; @ISA = qw(Exporter); @EXPORT = qw(&func1 &func2 &func4); %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ], # your exported package globals go here, # as well as any optionally exported functions @EXPORT_OK = qw($Var1 %Hashit &func3); use vars qw($Var1 %Hashit); # non-exported package globals go here use vars qw(@more $stuff); # initialize package globals, first exported ones $Var1 = ''; %Hashit = (); # then the others (which are still accessible as $Some::Module::stuff) $stuff = ''; @more = (); # all file-scoped lexicals must be created before # the functions below that use them. # file-private lexicals go here my $priv_var = ''; my %secret_hash = (); # here's a file-private function as a closure, # callable as &$priv_func. my $priv_func = sub {
 # stuff goes here. };
 # make all your functions, whether exported or not; # remember to put something interesting in the {} stubs sub func1 {
 ....
}
# no prototype sub func2() {
 ....
}
# proto'd void sub func3($$) {
 ....
}
# proto'd to 2 scalars # this one isn't auto-exported, but could be called! sub func4(\%) {
 ....
}
# proto'd to 1 hash ref END {
}
# module clean-up code here (global destructor) 1;