Your SlideShare is downloading. ×
Perl Modules
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Perl Modules


Published on

Published in: Technology, Business

1 Comment
1 Like
No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

No notes for slide
  • Transcript

    • 1. How to write Perl Modules Some practical advice about how to build a perl module March 21, 2003 – Stanford Linear Accelerator Center Fabrizio Coccetti
    • 2. Agenda
      • What a Perl Module is
      • Why it is convenient to use Perl Modules
      • How to make Perl Modules
      • An example of a Perl Module
      • Preparing the package for shipping
      Perl Module are easy to make and handy to use
    • 3. What a Perl Module is
      • A Perl Module is a self-contained piece of [Perl] code that can be used by a Perl program (or by other Perl modules)
      • It is conceptually similar to:
        • a C link library
        • a C++/Java class
    • 4. Why it is convenient to use PMs
      • Installation is straightforward: perl Makefile.PL; make; make install
          • The Perl interpreter has a list of directories in which it searches for modules (global array @INC)
      • Installation is platform independent (Solaris, Linux, Windows, …)
      • Easy to use in Perl Programs: use IPEM::PingER
      • Easy to update both for the maintainers of a Perl Module and system administrators at remote sites
      Time saving technique !!
    • 5. Before making a PM
      • Chose an appropriate name for the PM
      • Each Perl Module has an unique name. Perl provides a hierarchal name space for modules, similar to the name space for Java classes.
      • Components of a module name are separated by double colons “::”. i.e. IEPM::PingER
    • 6. Let’s start to make a Perl Module
      • Create the Perl Module Tree:
          • -A omits the Autoloader code (best used by modules that define a large number of infrequently used subroutines)
          • -X omits XS elements (eXternal Subroutine, where eXternal means external to Perl, i.e. C)
          • -n specifies the name of the module
      $ h2xs -AX -n IEPM::PingER
    • 7. What h2xs does for the developer
      • Creates subdirs: ./IEPM/PingER/
      • Creates the following files and the t/ dir:
          • Changes
          • Makefile.PL
          • MANIFEST (contains the list of all files in the package )
          • README
          • t/ (test files)
          • (perl code goes here)
    • 8. Some advice on writing the code of a PM
      • A PM can use other PMs
      • use strict; (i.e. $IEPM::PingER::var)
      • use 5.6.1;
      • $VERSION=’1.03’;
      • @EXPORT = qw(ping_it);
      • sub ping_it {… … …}
      • 1;
      • __END__
    • 9. How to use a PM in a Perl program
      • Another way is to use @EXPORT_OK in the Perl Module:
      • @EXPORT_OK = qw(ping_it log_it);
      • And in the Perl Program
      • use IEPM::PingER qw(log_it)
      use IEPM::PingER; $answer = ping_it (;
    • 10. Use Carp in Perl Modules
      • The Carp module allows to present error messages from the caller's perspective
      warn "No hostname given"; No hostname given at /usr/local/lib/perl5/site_perl/5.6/IEPM/ line 143. carp "No hostname given"; No hostname given at line 5.
      • Recipe:
      use Carp; warn carp die croak
    • 11. Example: the beginning of IEPM::PingER
      • package IEPM::PingER;
      • use 5.008;
      • use strict;
      • use warnings;
      • use Carp;
      • require Exporter;
      • our @ISA = qw(Exporter);
      • use Time::CTime;
      • use DB_File;
      • our @EXPORT = qw(log_it ping_it);
      • our $VERSION = '1.03';
    • 12. Example: the subroutine ping_it
      • PingER.PM
      • sub ping_it {
      • my ($ping_cmd,$dest_name,$dest_ip, $ping_interval, $ping_size, $ping_count) = @_ ;
      • … … … …
      • return ($time, $packets_sent, $packets_rcvd, $min, $avg, $max, @seqno, @pingtimes) ;
      • }
      • use IEPM::PingER;
      • ($time, $packets_sent, $packets_rcvd, $min, $avg, $max, $seqno, $pingtimes) = ping_it ($ping_cmd,$dest_name,$dest_ip, $ping_interval, 1000, $ping_count);
    • 13. Preparing the package for shipping
      • Prepare the package for shipping is straightforward:
      • $ perl Makefile.PL; make; make dist;
      • The commands above create the compressed archive: IEPM-PingER-1.03.tar.gz
    • 14. References
      • Perl Module Mechanics http://
      • The Perl Module Library
      • Perl Modules
      • The Perl 5 Modules List
      • Practical Perl Programming
      • Perlnewmod - preparing a new module for distribution