Perl module

This is an old revision of this page, as edited by BeccaDax (talk | contribs) at 04:54, 17 January 2005 (Rewrote the sample module for better formatting, and included a few explanitory comments.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

A Perl module is a discrete component of software for the Perl programming language. A module is distinguished by a unique namespace, e.g. "CGI" or "Net::FTP" or "XML::Parser". By conventions, there is typically one module per file with a .pm extension. A collection of one or more modules, with accompanying documentation and build scripts, compose a package. The Perl community has a sizable library of packages available for search and download via CPAN.

It is common for Perl modules to have embedded documentation in Perl's [[Plain Old Documentation|POD]] format. Many modules favor an object-oriented style, but many are procedural instead, especially old modules.

Below is an example of a very simple object-oriented Perl module and a short program which makes use of the module. It is implemented in a dialect of Perl5 which is compatible with Perl 5.6.0 and higher.

helloworld.pl


 #!/usr/bin/perl -w
 use Hello::World;
 my $hello = Hello::World->new();
 $hello->print();

Hello/World.pm


 # The 'package' command gives the name of the module or class.
 
 package Hello::World;
 use strict;
 use warnings;
 
 # By convention, a module's version number is stored in 
 # $ModuleName::VERSION; certain forms of the "use" built-in depend 
 # on this variable being defined.
 
 our $VERSION = "1.0";
 
 # Lines starting with an equal sign indicate embedded POD 
 # documentation.  POD sections end with an =cut directive, and can 
 # be intermixed almost freely with normal code.
 
 =head1 NAME
 
 Hello::World - An encapsulation of a commonly output message
 
 =head1 SYNOPSIS
 
    use Hello::World;
    my $hw = new Hello::World();
    $hw->print();
 
 =head1 DESCRIPTION
 
 This is an object-oriented library which can print the famous "H.W."
 message.
 
 =head1 METHODS
 
 =over
 
 =item new
 
 Instantiates an object which holds a greeting message.
 
 =cut
 
 sub new {
    my $pkg = shift;
    my $self = bless({
       message => "Hello, world!",
    }, $pkg);
    return $self;
 }
 
 =item to_string
 
 Returns the greeting as a string
 
 =cut
 
 sub to_string {
    my $self = shift;
    return $self->{message};
 }
 
 =item print
 
 Outputs the greeting to STDOUT
 
 =cut
 
 sub print {
    my $self = shift;
    print $self->toString(),"\n";
 }
 
 =back
 
 =head1 AUTHOR
 
 Joe Hacker <joe@joehacker.org>
 
 =cut
 
 # The lone "1;" at the end of the file indicates that the module 
 # has been successfully initialized.  Some modules contain code 
 # that runs as soon as the module is compiled, before the program 
 # that included it is finished compiling; they can arrange to return
 # a non-true value if something goes wrong.
 1;