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

5,347
views

Published on

Published in: Technology, Business

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total Views
5,347
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
1
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
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)
          • PingER.pm (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 (host.domain.edu);
    • 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/PingER.pm line 143. carp "No hostname given"; No hostname given at perl_script.pl 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) ;
      • }
      • timeping.pl
      • 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:// world.std.com/~swmcd/steven/perl/module_mechanics.html
      • The Perl Module Library http://search.cpan.org/author/JHI/perl-5.8.0/pod/perlmodlib.pod
      • Perl Modules http://search.cpan.org/author/JHI/perl-5.8.0/pod/perlmod.pod
      • The Perl 5 Modules List http://www.cpan.org/modules/00modlist.long.html
      • Practical Perl Programming http://www.cs.cf.ac.uk/Dave/PERL/node131.html
      • Perlnewmod - preparing a new module for distribution http://www.perlpod.com/5.6.1/perlnewmod.html