Practical Guide to Writing Perl Modules
140 likes | 179 Vues
Learn how to build Perl modules efficiently, including examples, coding tips, and packaging instructions. Save time and improve productivity with this comprehensive guide.
Practical Guide to Writing Perl Modules
E N D
Presentation Transcript
How to write Perl Modules Some practical advice about how to build a perl module March 21, 2003 – Stanford Linear Accelerator Center Fabrizio Coccetti Fabrizio Coccetti - Stanford Linear Accelerator Center
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 Fabrizio Coccetti - Stanford Linear Accelerator Center
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 Fabrizio Coccetti - Stanford Linear Accelerator Center
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 !! Fabrizio Coccetti - Stanford Linear Accelerator Center
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 Fabrizio Coccetti - Stanford Linear Accelerator Center
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 Fabrizio Coccetti - Stanford Linear Accelerator Center
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) Fabrizio Coccetti - Stanford Linear Accelerator Center
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__ Fabrizio Coccetti - Stanford Linear Accelerator Center
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); Fabrizio Coccetti - Stanford Linear Accelerator Center
Use Carp in Perl Modules use Carp;warn carp die croak • 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: Fabrizio Coccetti - Stanford Linear Accelerator Center
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'; Fabrizio Coccetti - Stanford Linear Accelerator Center
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); Fabrizio Coccetti - Stanford Linear Accelerator Center
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 Fabrizio Coccetti - Stanford Linear Accelerator Center
References • Perl Module Mechanicshttp://world.std.com/~swmcd/steven/perl/module_mechanics.html • The Perl Module Libraryhttp://search.cpan.org/author/JHI/perl-5.8.0/pod/perlmodlib.pod • Perl Moduleshttp://search.cpan.org/author/JHI/perl-5.8.0/pod/perlmod.pod • The Perl 5 Modules Listhttp://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 distributionhttp://www.perlpod.com/5.6.1/perlnewmod.html Fabrizio Coccetti - Stanford Linear Accelerator Center