Fix the sys/fcntl.h problem reported by Peter Prymmer.
[p5sagit/p5-mst-13.2.git] / pod / perlmodlib.pod
CommitLineData
f102b883 1=head1 NAME
2
3perlmodlib - constructing new Perl modules and finding existing ones
4
5=head1 DESCRIPTION
6
7=head1 THE PERL MODULE LIBRARY
8
19799a22 9Many modules are included the Perl distribution. These are described
10below, and all end in F<.pm>. You may discover compiled library
11file (usually ending in F<.so>) or small pieces of modules to be
12autoloaded (ending in F<.al>); these were automatically generated
13by the installation process. You may also discover files in the
14library directory that end in either F<.pl> or F<.ph>. These are
15old libraries supplied so that old programs that use them still
16run. The F<.pl> files will all eventually be converted into standard
17modules, and the F<.ph> files made by B<h2ph> will probably end up
18as extension modules made by B<h2xs>. (Some F<.ph> values may
19already be available through the POSIX, Errno, or Fcntl modules.)
20The B<pl2pm> file in the distribution may help in your conversion,
21but it's just a mechanical process and therefore far from bulletproof.
f102b883 22
23=head2 Pragmatic Modules
24
19799a22 25They work somewhat like compiler directives (pragmata) in that they
26tend to affect the compilation of your program, and thus will usually
27work well only when used within a C<use>, or C<no>. Most of these
28are lexically scoped, so an inner BLOCK may countermand them
29by saying:
f102b883 30
31 no integer;
32 no strict 'refs';
4438c4b7 33 no warnings;
f102b883 34
35which lasts until the end of that BLOCK.
36
19799a22 37Some pragmas are lexically scoped--typically those that affect the
38C<$^H> hints variable. Others affect the current package instead,
77ca0c92 39like C<use vars> and C<use subs>, which allow you to predeclare a
19799a22 40variables or subroutines within a particular I<file> rather than
41just a block. Such declarations are effective for the entire file
42for which they were declared. You cannot rescind them with C<no
43vars> or C<no subs>.
f102b883 44
45The following pragmas are defined (and have their own documentation).
46
47=over 12
48
09bef843 49=item attributes
50
9e107c59 51Get/set subroutine or variable attributes
09bef843 52
19799a22 53=item attrs
f102b883 54
9e107c59 55Set/get attributes of a subroutine (deprecated)
19799a22 56
57=item autouse
58
9e107c59 59Postpone load of modules until a function is used
19799a22 60
61=item base
62
63Establish IS-A relationship with base class at compile time
f102b883 64
65=item blib
66
19799a22 67Use MakeMaker's uninstalled version of a package
68
2e1d04bc 69=item bytes
9e107c59 70
2e1d04bc 71Force byte semantics rather than character semantics
9e107c59 72
73=item charnames
74
75Define character names for C<\N{named}> string literal escape.
76
19799a22 77=item constant
78
9e107c59 79Declare constants
f102b883 80
81=item diagnostics
82
2e1d04bc 83Perl compiler pragma to force verbose warning diagnostics
19799a22 84
85=item fields
86
2e1d04bc 87Compile-time class fields
19799a22 88
89=item filetest
90
2e1d04bc 91Control the filetest permission operators
f102b883 92
93=item integer
94
9e107c59 95Compute arithmetic in integer instead of double
f102b883 96
97=item less
98
2e1d04bc 99Request less of something from the compiler
f102b883 100
f102b883 101=item locale
102
2e1d04bc 103Use and avoid POSIX locales for built-in operations
104
105=item open
106
107Set default disciplines for input and output
f102b883 108
109=item ops
110
9e107c59 111Restrict unsafe operations when compiling
f102b883 112
113=item overload
114
2e1d04bc 115Package for overloading perl operations
f102b883 116
165c0277 117=item perlio
118
119Configure C level IO
120
b3eb6a9b 121=item re
122
2e1d04bc 123Alter regular expression behaviour
b3eb6a9b 124
f102b883 125=item sigtrap
126
9e107c59 127Enable simple signal handling
f102b883 128
129=item strict
130
9e107c59 131Restrict unsafe constructs
f102b883 132
133=item subs
134
2e1d04bc 135Predeclare sub names
f102b883 136
19799a22 137=item utf8
f102b883 138
2e1d04bc 139Enable/disable UTF-8 in source code
f102b883 140
141=item vars
142
2e1d04bc 143Predeclare global variable names (obsolete)
f102b883 144
4438c4b7 145=item warnings
0453d815 146
9e107c59 147Control optional warnings
19799a22 148
13a2d996 149=item warnings::register
150
151Warnings import function
152
f102b883 153=back
154
155=head2 Standard Modules
156
157Standard, bundled modules are all expected to behave in a well-defined
158manner with respect to namespace pollution because they use the
159Exporter module. See their own documentation for details.
160
161=over 12
162
163=item AnyDBM_File
164
2e1d04bc 165Provide framework for multiple DBMs
f102b883 166
167=item AutoLoader
168
9e107c59 169Load subroutines only on demand
f102b883 170
171=item AutoSplit
172
9e107c59 173Split a package for autoloading
f102b883 174
19799a22 175=item B
176
2e1d04bc 177The Perl Compiler
19799a22 178
179=item B::Asmdata
180
181Autogenerated data about Perl ops, used to generate bytecode
182
183=item B::Assembler
184
185Assemble Perl bytecode
186
187=item B::Bblock
188
189Walk basic blocks
190
191=item B::Bytecode
192
193Perl compiler's bytecode backend
194
195=item B::C
196
197Perl compiler's C backend
198
199=item B::CC
200
201Perl compiler's optimized C translation backend
202
203=item B::Debug
204
205Walk Perl syntax tree, printing debug info about ops
206
207=item B::Deparse
208
2e1d04bc 209Perl compiler backend to produce perl code
19799a22 210
211=item B::Disassembler
212
213Disassemble Perl bytecode
214
215=item B::Lint
216
2e1d04bc 217Perl lint
19799a22 218
219=item B::Showlex
220
221Show lexical variables used in functions or files
222
223=item B::Stackobj
224
225Helper module for CC backend
226
13a2d996 227=item B::Stash
228
229Show what stashes are loaded
230
19799a22 231=item B::Terse
232
233Walk Perl syntax tree, printing terse info about ops
234
235=item B::Xref
236
237Generates cross reference reports for Perl programs
238
f102b883 239=item Benchmark
240
2e1d04bc 241Benchmark running times of Perl code
9e107c59 242
243=item ByteLoader
244
2e1d04bc 245Load byte compiled perl code
f102b883 246
19799a22 247=item CGI
248
2e1d04bc 249Simple Common Gateway Interface Class
19799a22 250
251=item CGI::Apache
252
2e1d04bc 253Backward compatibility module for CGI.pm
19799a22 254
255=item CGI::Carp
256
257CGI routines for writing to the HTTPD (or other) error log
258
259=item CGI::Cookie
260
261Interface to Netscape Cookies
262
263=item CGI::Fast
264
265CGI Interface for Fast CGI
266
9e107c59 267=item CGI::Pretty
268
269Module to produce nicely formatted HTML code
270
19799a22 271=item CGI::Push
272
273Simple Interface to Server Push
274
275=item CGI::Switch
276
2e1d04bc 277Backward compatibility module for defunct CGI::Switch
19799a22 278
f102b883 279=item CPAN
280
2e1d04bc 281Query, download and build perl modules from CPAN sites
f102b883 282
283=item CPAN::FirstTime
284
2e1d04bc 285Utility for CPAN::Config file Initialization
f102b883 286
287=item CPAN::Nox
288
19799a22 289Wrapper around CPAN.pm without using any XS module
f102b883 290
291=item Carp
292
2e1d04bc 293Warn of errors (from perspective of caller)
9e107c59 294
f102b883 295=item Class::Struct
296
9e107c59 297Declare struct-like datatypes as Perl classes
f102b883 298
f102b883 299=item Cwd
300
9e107c59 301Get pathname of current working directory
f102b883 302
19799a22 303=item DB
304
2e1d04bc 305Programmatic interface to the Perl debugging API (draft, subject to
19799a22 306
f102b883 307=item DB_File
308
19799a22 309Perl5 access to Berkeley DB version 1.x
310
f102b883 311=item Devel::SelfStubber
312
9e107c59 313Generate stubs for a SelfLoading module
f102b883 314
315=item DirHandle
316
9e107c59 317Supply object methods for directory handles
f102b883 318
19799a22 319=item Dumpvalue
320
2e1d04bc 321Provides screen dump of Perl data.
f102b883 322
13a2d996 323=item Encode
324
325Character encodings
326
f102b883 327=item English
328
2e1d04bc 329Use nice English (or awk) names for ugly punctuation variables
f102b883 330
331=item Env
332
2e1d04bc 333Perl module that imports environment variables as scalars or arrays
f102b883 334
335=item Exporter
336
2e1d04bc 337Implements default import method for modules
9e107c59 338
339=item Exporter::Heavy
340
341Exporter guts
19799a22 342
343=item ExtUtils::Command
344
2e1d04bc 345Utilities to replace common UNIX commands in Makefiles etc.
f102b883 346
347=item ExtUtils::Embed
348
2e1d04bc 349Utilities for embedding Perl in C/C++ applications
f102b883 350
351=item ExtUtils::Install
352
9e107c59 353Install files from here to there
f102b883 354
19799a22 355=item ExtUtils::Installed
356
357Inventory management of installed modules
358
f102b883 359=item ExtUtils::Liblist
360
9e107c59 361Determine libraries to use and how to use them
362
363=item ExtUtils::MM_Cygwin
364
2e1d04bc 365Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 366
367=item ExtUtils::MM_OS2
368
2e1d04bc 369Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 370
371=item ExtUtils::MM_Unix
372
9e107c59 373Methods used by ExtUtils::MakeMaker
f102b883 374
375=item ExtUtils::MM_VMS
376
2e1d04bc 377Methods to override UN*X behaviour in ExtUtils::MakeMaker
19799a22 378
379=item ExtUtils::MM_Win32
380
2e1d04bc 381Methods to override UN*X behaviour in ExtUtils::MakeMaker
f102b883 382
383=item ExtUtils::MakeMaker
384
9e107c59 385Create an extension Makefile
f102b883 386
387=item ExtUtils::Manifest
388
9e107c59 389Utilities to write and check a MANIFEST file
f102b883 390
391=item ExtUtils::Mkbootstrap
392
9e107c59 393Make a bootstrap file for use by DynaLoader
f102b883 394
395=item ExtUtils::Mksymlists
396
9e107c59 397Write linker options files for dynamic extension
f102b883 398
19799a22 399=item ExtUtils::Packlist
400
9e107c59 401Manage .packlist files
19799a22 402
f102b883 403=item ExtUtils::testlib
404
9e107c59 405Add blib/* directories to @INC
f102b883 406
b6c543e3 407=item Fatal
408
9e107c59 409Replace functions with equivalents which succeed or die
b6c543e3 410
f102b883 411=item Fcntl
412
2e1d04bc 413Load the C Fcntl.h defines
f102b883 414
415=item File::Basename
416
9e107c59 417Split a pathname into pieces
418
419=item File::CheckTree
420
421Run many filetest checks on a tree
f102b883 422
f102b883 423=item File::Compare
424
19799a22 425Compare files or filehandles
f102b883 426
427=item File::Copy
428
19799a22 429Copy files or filehandles
430
431=item File::DosGlob
432
2e1d04bc 433DOS like globbing and then some
f102b883 434
435=item File::Find
436
2e1d04bc 437Traverse a file tree
f102b883 438
439=item File::Path
440
2e1d04bc 441Create or remove directory trees
f102b883 442
f505c983 443=item File::Spec
444
9e107c59 445Portably perform operations on file names
f505c983 446
165c0277 447=item File::Spec::Epoc
448
449Methods for Epoc file specs
450
f505c983 451=item File::Spec::Functions
452
9e107c59 453Portably perform operations on file names
19799a22 454
455=item File::Spec::Mac
456
457File::Spec for MacOS
458
459=item File::Spec::OS2
460
9e107c59 461Methods for OS/2 file specs
19799a22 462
463=item File::Spec::Unix
464
9e107c59 465Methods used by File::Spec
19799a22 466
467=item File::Spec::VMS
468
9e107c59 469Methods for VMS file specs
19799a22 470
471=item File::Spec::Win32
472
9e107c59 473Methods for Win32 file specs
f505c983 474
2e1d04bc 475=item File::Temp
476
477Return name and handle of a temporary file safely
478
f102b883 479=item File::stat
480
9e107c59 481By-name interface to Perl's built-in stat() functions
f102b883 482
483=item FileCache
484
9e107c59 485Keep more files open than the system permits
f102b883 486
487=item FileHandle
488
9e107c59 489Supply object methods for filehandles
f102b883 490
165c0277 491=item Filter::Simple
492
493Simplified source filtering
494
f102b883 495=item FindBin
496
2e1d04bc 497Locate directory of original perl script
f102b883 498
499=item Getopt::Long
500
9e107c59 501Extended processing of command line options
f102b883 502
503=item Getopt::Std
504
19799a22 505Process single-character switches with switch clustering
f102b883 506
507=item I18N::Collate
508
2e1d04bc 509Compare 8-bit scalar data according to the current locale
f102b883 510
511=item IO
512
2e1d04bc 513Load various IO modules
f102b883 514
515=item IPC::Open2
516
9e107c59 517Open a process for both reading and writing
f102b883 518
519=item IPC::Open3
520
9e107c59 521Open a process for reading, writing, and error handling
f102b883 522
523=item Math::BigFloat
524
19799a22 525Arbitrary length float math package
f102b883 526
527=item Math::BigInt
528
19799a22 529Arbitrary size integer math package
f102b883 530
531=item Math::Complex
532
9e107c59 533Complex numbers and associated mathematical functions
f102b883 534
404b15a1 535=item Math::Trig
536
9e107c59 537Trigonometric functions
f102b883 538
2e1d04bc 539=item NDBM_File
540
541Tied access to ndbm files
542
f102b883 543=item Net::Ping
544
9e107c59 545Check a remote host for reachability
f102b883 546
547=item Net::hostent
548
9e107c59 549By-name interface to Perl's built-in gethost*() functions
f102b883 550
551=item Net::netent
552
9e107c59 553By-name interface to Perl's built-in getnet*() functions
f102b883 554
555=item Net::protoent
556
9e107c59 557By-name interface to Perl's built-in getproto*() functions
f102b883 558
559=item Net::servent
560
9e107c59 561By-name interface to Perl's built-in getserv*() functions
f102b883 562
19799a22 563=item O
f102b883 564
19799a22 565Generic interface to Perl Compiler backends
f102b883 566
2e1d04bc 567=item ODBM_File
f102b883 568
2e1d04bc 569Tied access to odbm files
f102b883 570
2e1d04bc 571=item Opcode
f102b883 572
2e1d04bc 573Disable named opcodes when compiling perl code
19799a22 574
9e107c59 575=item Pod::Checker
576
577Check pod documents for syntax errors
578
2e1d04bc 579=item Pod::Find
580
581Find POD documents in directory trees
582
19799a22 583=item Pod::Html
584
9e107c59 585Module to convert pod files to HTML
586
587=item Pod::InputObjects
588
2e1d04bc 589Objects representing POD input paragraphs, commands, etc.
9e107c59 590
13a2d996 591=item Pod::LaTeX
592
593Convert Pod data to formatted Latex
594
9e107c59 595=item Pod::Man
596
597Convert POD data to formatted *roff input
598
2e1d04bc 599=item Pod::ParseUtils
600
601Helpers for POD parsing and conversion
602
9e107c59 603=item Pod::Parser
604
605Base class for creating POD filters and translators
606
2e1d04bc 607=item Pod::Plainer
608
609Perl extension for converting Pod to old style Pod.
610
9e107c59 611=item Pod::Select
612
613Extract selected sections of POD from input
19799a22 614
615=item Pod::Text
616
9e107c59 617Convert POD data to formatted ASCII text
618
619=item Pod::Text::Color
620
621Convert POD data to formatted color ASCII text
622
2e1d04bc 623=item Pod::Text::Termcap
624
625Convert POD data to ASCII text with format escapes
626
9e107c59 627=item Pod::Usage
628
629Print a usage message from embedded pod documentation
f102b883 630
631=item SDBM_File
632
19799a22 633Tied access to sdbm files
f102b883 634
635=item Safe
636
19799a22 637Compile and execute code in restricted compartments
f102b883 638
639=item Search::Dict
640
9e107c59 641Search for key in dictionary file
f102b883 642
643=item SelectSaver
644
9e107c59 645Save and restore selected file handle
f102b883 646
647=item SelfLoader
648
9e107c59 649Load functions only on demand
f102b883 650
651=item Shell
652
2e1d04bc 653Run shell commands transparently within perl
f102b883 654
655=item Socket
656
2e1d04bc 657Load the C socket.h defines and structure manipulators
f102b883 658
13a2d996 659=item Storable
660
661Persistency for perl data structures
662
f102b883 663=item Symbol
664
9e107c59 665Manipulate Perl symbols and their names
f102b883 666
2e1d04bc 667=item Term::ANSIColor
f102b883 668
2e1d04bc 669Color screen output using ANSI escape sequences
f102b883 670
671=item Term::Cap
672
2e1d04bc 673Perl termcap interface
f102b883 674
675=item Term::Complete
676
2e1d04bc 677Perl word completion module
f102b883 678
679=item Term::ReadLine
680
2e1d04bc 681Perl interface to various C<readline> packages. If
19799a22 682
683=item Test
684
9e107c59 685Provides a simple framework for writing test scripts
f102b883 686
687=item Test::Harness
688
2e1d04bc 689Run perl standard test scripts with statistics
f102b883 690
691=item Text::Abbrev
692
9e107c59 693Create an abbreviation table from a list
f102b883 694
695=item Text::ParseWords
696
2e1d04bc 697Parse text into an array of tokens or array of arrays
f102b883 698
699=item Text::Soundex
700
2e1d04bc 701Implementation of the Soundex Algorithm as Described by Knuth
f102b883 702
703=item Text::Wrap
704
9e107c59 705Line wrapping to form simple paragraphs
19799a22 706
707=item Tie::Array
708
9e107c59 709Base class for tied arrays
19799a22 710
711=item Tie::Handle
712
9e107c59 713Base class definitions for tied handles
19799a22 714
9e107c59 715=item Tie::Hash
f102b883 716
9e107c59 717Base class definitions for tied hashes
f102b883 718
719=item Tie::RefHash
720
9e107c59 721Use references as hash keys
f102b883 722
9e107c59 723=item Tie::Scalar
f102b883 724
9e107c59 725Base class definitions for tied scalars
f102b883 726
727=item Tie::SubstrHash
728
19799a22 729Fixed-table-size, fixed-key-length hashing
f102b883 730
731=item Time::Local
732
9e107c59 733Efficiently compute time from local and GMT time
f102b883 734
735=item Time::gmtime
736
9e107c59 737By-name interface to Perl's built-in gmtime() function
f102b883 738
739=item Time::localtime
740
9e107c59 741By-name interface to Perl's built-in localtime() function
f102b883 742
743=item Time::tm
744
9e107c59 745Internal object used by Time::gmtime and Time::localtime
f102b883 746
747=item UNIVERSAL
748
9e107c59 749Base class for ALL classes (blessed references)
f102b883 750
751=item User::grent
752
9e107c59 753By-name interface to Perl's built-in getgr*() functions
f102b883 754
755=item User::pwent
756
9e107c59 757By-name interface to Perl's built-in getpw*() functions
f102b883 758
759=back
760
19799a22 761To find out I<all> modules installed on your system, including
2e1d04bc 762those without documentation or outside the standard release,
b1866b2d 763just do this:
f102b883 764
5a964f20 765 % find `perl -e 'print "@INC"'` -name '*.pm' -print
f102b883 766
2e1d04bc 767They should all have their own documentation installed and accessible
768via your system man(1) command. If you do not have a B<find>
19799a22 769program, you can use the Perl B<find2perl> program instead, which
770generates Perl code as output you can run through perl. If you
771have a B<man> program but it doesn't find your modules, you'll have
2e1d04bc 772to fix your manpath. See L<perl> for details. If you have no
773system B<man> command, you might try the B<perldoc> program.
f102b883 774
775=head2 Extension Modules
776
19799a22 777Extension modules are written in C (or a mix of Perl and C). They
778are usually dynamically loaded into Perl if and when you need them,
2e1d04bc 779but may also be be linked in statically. Supported extension modules
19799a22 780include Socket, Fcntl, and POSIX.
f102b883 781
782Many popular C extension modules do not come bundled (at least, not
19799a22 783completely) due to their sizes, volatility, or simply lack of time
784for adequate testing and configuration across the multitude of
785platforms on which Perl was beta-tested. You are encouraged to
786look for them on CPAN (described below), or using web search engines
787like Alta Vista or Deja News.
f102b883 788
789=head1 CPAN
790
19799a22 791CPAN stands for Comprehensive Perl Archive Network; it's a globally
792replicated trove of Perl materials, including documentation, style
2e1d04bc 793guides, tricks and traps, alternate ports to non-Unix systems and
19799a22 794occasional binary distributions for these. Search engines for
795CPAN can be found at http://cpan.perl.com/ and at
796http://theory.uwinnipeg.ca/mod_perl/cpan-search.pl .
797
798Most importantly, CPAN includes around a thousand unbundled modules,
799some of which require a C compiler to build. Major categories of
800modules are:
f102b883 801
165c0277 802=over
f102b883 803
804=item *
551e1d92 805
f102b883 806Language Extensions and Documentation Tools
807
808=item *
551e1d92 809
f102b883 810Development Support
811
812=item *
551e1d92 813
f102b883 814Operating System Interfaces
815
816=item *
551e1d92 817
f102b883 818Networking, Device Control (modems) and InterProcess Communication
819
820=item *
551e1d92 821
f102b883 822Data Types and Data Type Utilities
823
824=item *
551e1d92 825
f102b883 826Database Interfaces
827
828=item *
551e1d92 829
f102b883 830User Interfaces
831
832=item *
551e1d92 833
f102b883 834Interfaces to / Emulations of Other Programming Languages
835
836=item *
551e1d92 837
f102b883 838File Names, File Systems and File Locking (see also File Handles)
839
840=item *
551e1d92 841
f102b883 842String Processing, Language Text Processing, Parsing, and Searching
843
844=item *
551e1d92 845
f102b883 846Option, Argument, Parameter, and Configuration File Processing
847
848=item *
551e1d92 849
f102b883 850Internationalization and Locale
851
852=item *
551e1d92 853
f102b883 854Authentication, Security, and Encryption
855
856=item *
551e1d92 857
f102b883 858World Wide Web, HTML, HTTP, CGI, MIME
859
860=item *
551e1d92 861
f102b883 862Server and Daemon Utilities
863
864=item *
551e1d92 865
f102b883 866Archiving and Compression
867
868=item *
551e1d92 869
f102b883 870Images, Pixmap and Bitmap Manipulation, Drawing, and Graphing
871
872=item *
551e1d92 873
f102b883 874Mail and Usenet News
875
876=item *
551e1d92 877
f102b883 878Control Flow Utilities (callbacks and exceptions etc)
879
880=item *
551e1d92 881
f102b883 882File Handle and Input/Output Stream Utilities
883
884=item *
551e1d92 885
f102b883 886Miscellaneous Modules
887
888=back
889
19799a22 890Registered CPAN sites as of this writing include the following.
f102b883 891You should try to choose one close to you:
892
165c0277 893=over
f102b883 894
19799a22 895=item Africa
f102b883 896
0974df93 897 South Africa ftp://ftp.is.co.za/programming/perl/CPAN/
898 ftp://ftp.saix.net/pub/CPAN/
899 ftp://ftp.sun.ac.za/CPAN/
be94a901 900 ftp://ftpza.co.za/pub/mirrors/cpan/
f102b883 901
6cecdcac 902
19799a22 903=item Asia
f102b883 904
0974df93 905 China ftp://freesoft.cei.gov.cn/pub/languages/perl/CPAN/
6cecdcac 906 Hong Kong ftp://ftp.pacific.net.hk/pub/mirror/CPAN/
0974df93 907 Indonesia ftp://malone.piksi.itb.ac.id/pub/CPAN/
908 Israel ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/
909 Japan ftp://ftp.dti.ad.jp/pub/lang/CPAN/
be94a901 910 ftp://ftp.jaist.ac.jp/pub/lang/perl/CPAN/
911 ftp://ftp.lab.kdd.co.jp/lang/perl/CPAN/
912 ftp://ftp.meisei-u.ac.jp/pub/CPAN/
19799a22 913 ftp://ftp.ring.gr.jp/pub/lang/perl/CPAN/
be94a901 914 ftp://mirror.nucba.ac.jp/mirror/Perl/
6cecdcac 915 Saudi-Arabia ftp://ftp.isu.net.sa/pub/CPAN/
0974df93 916 Singapore ftp://ftp.nus.edu.sg/pub/unix/perl/CPAN/
917 South Korea ftp://ftp.bora.net/pub/CPAN/
918 ftp://ftp.kornet.net/pub/CPAN/
be94a901 919 ftp://ftp.nuri.net/pub/CPAN/
0974df93 920 Taiwan ftp://coda.nctu.edu.tw/computer-languages/perl/CPAN/
921 ftp://ftp.ee.ncku.edu.tw/pub3/perl/CPAN/
be94a901 922 ftp://ftp1.sinica.edu.tw/pub1/perl/CPAN/
6cecdcac 923 Thailand ftp://ftp.nectec.or.th/pub/mirrors/CPAN/
924
f102b883 925
19799a22 926=item Australasia
f102b883 927
0974df93 928 Australia ftp://cpan.topend.com.au/pub/CPAN/
6cecdcac 929 ftp://ftp.labyrinth.net.au/pub/perl-CPAN/
be94a901 930 ftp://ftp.sage-au.org.au/pub/compilers/perl/CPAN/
931 ftp://mirror.aarnet.edu.au/pub/perl/CPAN/
0974df93 932 New Zealand ftp://ftp.auckland.ac.nz/pub/perl/CPAN/
be94a901 933 ftp://sunsite.net.nz/pub/languages/perl/CPAN/
934
6cecdcac 935
0974df93 936=item Central America
be94a901 937
0974df93 938 Costa Rica ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/
f102b883 939
6cecdcac 940
19799a22 941=item Europe
f102b883 942
0974df93 943 Austria ftp://ftp.tuwien.ac.at/pub/languages/perl/CPAN/
944 Belgium ftp://ftp.kulnet.kuleuven.ac.be/pub/mirror/CPAN/
945 Bulgaria ftp://ftp.ntrl.net/pub/mirrors/CPAN/
946 Croatia ftp://ftp.linux.hr/pub/CPAN/
947 Czech Republic ftp://ftp.fi.muni.cz/pub/perl/
be94a901 948 ftp://sunsite.mff.cuni.cz/Languages/Perl/CPAN/
0974df93 949 Denmark ftp://sunsite.auc.dk/pub/languages/perl/CPAN/
950 Estonia ftp://ftp.ut.ee/pub/languages/perl/CPAN/
951 Finland ftp://ftp.funet.fi/pub/languages/perl/CPAN/
6cecdcac 952 France ftp://ftp.grolier.fr/pub/perl/CPAN/
953 ftp://ftp.lip6.fr/pub/perl/CPAN/
be94a901 954 ftp://ftp.oleane.net/pub/mirrors/CPAN/
955 ftp://ftp.pasteur.fr/pub/computing/CPAN/
0974df93 956 ftp://ftp.uvsq.fr/pub/perl/CPAN/
6cecdcac 957 German ftp://ftp.gigabell.net/pub/CPAN/
958 Germany ftp://ftp.archive.de.uu.net/pub/CPAN/
959 ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/
960 ftp://ftp.gmd.de/packages/CPAN/
961 ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
2e1d04bc 962
963ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
6cecdcac 964 ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
965 ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
966 ftp://ftp.uni-erlangen.de/pub/source/CPAN/
967 ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
0974df93 968 Germany ftp://ftp.archive.de.uu.net/pub/CPAN/
6cecdcac 969 ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/
be94a901 970 ftp://ftp.gmd.de/packages/CPAN/
971 ftp://ftp.gwdg.de/pub/languages/perl/CPAN/
2e1d04bc 972
973ftp://ftp.leo.org/pub/comp/general/programming/languages/script/perl/CPAN/
be94a901 974 ftp://ftp.mpi-sb.mpg.de/pub/perl/CPAN/
975 ftp://ftp.rz.ruhr-uni-bochum.de/pub/CPAN/
976 ftp://ftp.uni-erlangen.de/pub/source/CPAN/
977 ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN/
0974df93 978 Greece ftp://ftp.ntua.gr/pub/lang/perl/
979 Hungary ftp://ftp.kfki.hu/pub/packages/perl/CPAN/
980 Iceland ftp://ftp.gm.is/pub/CPAN/
981 Ireland ftp://cpan.indigo.ie/pub/CPAN/
982 ftp://sunsite.compapp.dcu.ie/pub/perl/
983 Italy ftp://cis.uniRoma2.it/CPAN/
be94a901 984 ftp://ftp.flashnet.it/pub/CPAN/
19799a22 985 ftp://ftp.unina.it/pub/Other/CPAN/
be94a901 986 ftp://ftp.unipi.it/pub/mirror/perl/CPAN/
0974df93 987 Netherlands ftp://ftp.cs.uu.nl/mirror/CPAN/
be94a901 988 ftp://ftp.nluug.nl/pub/languages/perl/CPAN/
0974df93 989 Norway ftp://ftp.uit.no/pub/languages/perl/cpan/
be94a901 990 ftp://sunsite.uio.no/pub/languages/perl/CPAN/
6cecdcac 991 Poland ftp://ftp.man.torun.pl/pub/CPAN/
be94a901 992 ftp://ftp.pk.edu.pl/pub/lang/perl/CPAN/
993 ftp://sunsite.icm.edu.pl/pub/CPAN/
0974df93 994 Portugal ftp://ftp.ci.uminho.pt/pub/mirrors/cpan/
19799a22 995 ftp://ftp.ist.utl.pt/pub/CPAN/
be94a901 996 ftp://ftp.ua.pt/pub/CPAN/
6cecdcac 997 Romania ftp://ftp.dnttm.ro/pub/CPAN/
19799a22 998 Russia ftp://ftp.chg.ru/pub/lang/perl/CPAN/
be94a901 999 ftp://ftp.sai.msu.su/pub/lang/perl/CPAN/
0974df93 1000 Slovakia ftp://ftp.entry.sk/pub/languages/perl/CPAN/
1001 Slovenia ftp://ftp.arnes.si/software/perl/CPAN/
1002 Spain ftp://ftp.etse.urv.es/pub/perl/
be94a901 1003 ftp://ftp.rediris.es/mirror/CPAN/
0974df93 1004 Sweden ftp://ftp.sunet.se/pub/lang/perl/CPAN/
1005 Switzerland ftp://sunsite.cnlab-switch.ch/mirror/CPAN/
1006 Turkey ftp://sunsite.bilkent.edu.tr/pub/languages/CPAN/
1007 United Kingdom ftp://ftp.demon.co.uk/pub/mirrors/perl/CPAN/
be94a901 1008 ftp://ftp.flirble.org/pub/languages/perl/CPAN/
2e1d04bc 1009
1010ftp://ftp.mirror.ac.uk/sites/ftp.funet.fi/pub/languages/perl/CPAN/
be94a901 1011 ftp://ftp.plig.org/pub/CPAN/
1012 ftp://sunsite.doc.ic.ac.uk/packages/CPAN/
f102b883 1013
6cecdcac 1014
19799a22 1015=item North America
f102b883 1016
0974df93 1017 Alberta ftp://sunsite.ualberta.ca/pub/Mirror/CPAN/
19799a22 1018 California ftp://cpan.nas.nasa.gov/pub/perl/CPAN/
0974df93 1019 ftp://cpan.valueclick.com/CPAN/
19799a22 1020 ftp://ftp.cdrom.com/pub/perl/CPAN/
6cecdcac 1021 http://download.sourceforge.net/mirrors/CPAN/
0974df93 1022 Colorado ftp://ftp.cs.colorado.edu/pub/perl/CPAN/
1023 Florida ftp://ftp.cise.ufl.edu/pub/perl/CPAN/
6cecdcac 1024 Georgia ftp://ftp.twoguys.org/CPAN/
0974df93 1025 Illinois ftp://uiarchive.uiuc.edu/pub/lang/perl/CPAN/
1026 Indiana ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN/
be94a901 1027 ftp://ftp.uwsg.indiana.edu/pub/perl/CPAN/
0974df93 1028 Kentucky ftp://ftp.uky.edu/CPAN/
1029 Manitoba ftp://theoryx5.uwinnipeg.ca/pub/CPAN/
2e1d04bc 1030 Massachusetts
1031ftp://ftp.ccs.neu.edu/net/mirrors/ftp.funet.fi/pub/languages/perl/CPAN/
be94a901 1032 ftp://ftp.iguide.com/pub/mirrors/packages/perl/CPAN/
19799a22 1033 Mexico ftp://ftp.msg.com.mx/pub/CPAN/
0974df93 1034 New York ftp://ftp.deao.net/pub/CPAN/
1035 ftp://ftp.rge.com/pub/languages/perl/
0974df93 1036 North Carolina ftp://ftp.duke.edu/pub/perl/
6cecdcac 1037 Nova Scotia ftp://cpan.chebucto.ns.ca/pub/CPAN/
0974df93 1038 Oklahoma ftp://ftp.ou.edu/mirrors/CPAN/
19799a22 1039 Ontario ftp://ftp.crc.ca/pub/packages/lang/perl/CPAN/
0974df93 1040 Oregon ftp://ftp.orst.edu/pub/packages/CPAN/
1041 Pennsylvania ftp://ftp.epix.net/pub/languages/perl/
1042 Tennessee ftp://ftp.sunsite.utk.edu/pub/CPAN/
1043 Texas ftp://ftp.sedl.org/pub/mirrors/CPAN/
6cecdcac 1044 ftp://jhcloos.com/pub/mirror/CPAN/
0974df93 1045 Utah ftp://mirror.xmission.com/CPAN/
1046 Virginia ftp://ftp.perl.org/pub/perl/CPAN/
be94a901 1047 ftp://ruff.cs.jmu.edu/pub/CPAN/
19799a22 1048 Washington ftp://ftp-mirror.internap.com/pub/CPAN/
6cecdcac 1049 ftp://ftp.llarian.net/pub/CPAN/
19799a22 1050 ftp://ftp.spu.edu/pub/CPAN/
f102b883 1051
6cecdcac 1052
19799a22 1053=item South America
f102b883 1054
0974df93 1055 Brazil ftp://cpan.if.usp.br/pub/mirror/CPAN/
1056 ftp://ftp.matrix.com.br/pub/perl/
6cecdcac 1057 Chile ftp://sunsite.dcc.uchile.cl/pub/Lang/PERL/
f102b883 1058
1059=back
1060
1061For an up-to-date listing of CPAN sites,
6cecdcac 1062see http://www.perl.com/perl/CPAN/SITES or ftp://www.perl.com/CPAN/SITES .
f102b883 1063
1064=head1 Modules: Creation, Use, and Abuse
1065
1066(The following section is borrowed directly from Tim Bunce's modules
1067file, available at your nearest CPAN site.)
1068
1069Perl implements a class using a package, but the presence of a
1070package doesn't imply the presence of a class. A package is just a
1071namespace. A class is a package that provides subroutines that can be
1072used as methods. A method is just a subroutine that expects, as its
1073first argument, either the name of a package (for "static" methods),
1074or a reference to something (for "virtual" methods).
1075
1076A module is a file that (by convention) provides a class of the same
1077name (sans the .pm), plus an import method in that class that can be
1078called to fetch exported symbols. This module may implement some of
1079its methods by loading dynamic C or C++ objects, but that should be
1080totally transparent to the user of the module. Likewise, the module
1081might set up an AUTOLOAD function to slurp in subroutine definitions on
1082demand, but this is also transparent. Only the F<.pm> file is required to
2e1d04bc 1083exist. See L<perlsub>, L<perltoot>, and L<AutoLoader> for details about
f102b883 1084the AUTOLOAD mechanism.
1085
1086=head2 Guidelines for Module Creation
1087
1088=over 4
1089
1090=item Do similar modules already exist in some form?
1091
1092If so, please try to reuse the existing modules either in whole or
1093by inheriting useful features into a new class. If this is not
1094practical try to get together with the module authors to work on
1095extending or enhancing the functionality of the existing modules.
1096A perfect example is the plethora of packages in perl4 for dealing
1097with command line options.
1098
1099If you are writing a module to expand an already existing set of
1100modules, please coordinate with the author of the package. It
1101helps if you follow the same naming scheme and module interaction
1102scheme as the original author.
1103
1104=item Try to design the new module to be easy to extend and reuse.
1105
9f1b1f2d 1106Try to C<use warnings;> (or C<use warnings qw(...);>).
1107Remember that you can add C<no warnings qw(...);> to individual blocks
2e1d04bc 1108of code that need less warnings.
19799a22 1109
f102b883 1110Use blessed references. Use the two argument form of bless to bless
1111into the class name given as the first parameter of the constructor,
1112e.g.,:
1113
1114 sub new {
2e1d04bc 1115 my $class = shift;
1116 return bless {}, $class;
f102b883 1117 }
1118
1119or even this if you'd like it to be used as either a static
1120or a virtual method.
1121
1122 sub new {
2e1d04bc 1123 my $self = shift;
1124 my $class = ref($self) || $self;
1125 return bless {}, $class;
f102b883 1126 }
1127
1128Pass arrays as references so more parameters can be added later
1129(it's also faster). Convert functions into methods where
1130appropriate. Split large methods into smaller more flexible ones.
1131Inherit methods from other modules if appropriate.
1132
1133Avoid class name tests like: C<die "Invalid" unless ref $ref eq 'FOO'>.
19799a22 1134Generally you can delete the C<eq 'FOO'> part with no harm at all.
f102b883 1135Let the objects look after themselves! Generally, avoid hard-wired
1136class names as far as possible.
1137
c47ff5f1 1138Avoid C<< $r->Class::func() >> where using C<@ISA=qw(... Class ...)> and
1139C<< $r->func() >> would work (see L<perlbot> for more details).
f102b883 1140
1141Use autosplit so little used or newly added functions won't be a
5a964f20 1142burden to programs that don't use them. Add test functions to
f102b883 1143the module after __END__ either using AutoSplit or by saying:
1144
1145 eval join('',<main::DATA>) || die $@ unless caller();
1146
1147Does your module pass the 'empty subclass' test? If you say
19799a22 1148C<@SUBCLASS::ISA = qw(YOURCLASS);> your applications should be able
f102b883 1149to use SUBCLASS in exactly the same way as YOURCLASS. For example,
1150does your application still work if you change: C<$obj = new YOURCLASS;>
1151into: C<$obj = new SUBCLASS;> ?
1152
1153Avoid keeping any state information in your packages. It makes it
1154difficult for multiple other packages to use yours. Keep state
1155information in objects.
1156
2e1d04bc 1157Always use B<-w>.
19799a22 1158
1159Try to C<use strict;> (or C<use strict qw(...);>).
f102b883 1160Remember that you can add C<no strict qw(...);> to individual blocks
2e1d04bc 1161of code that need less strictness.
19799a22 1162
2e1d04bc 1163Always use B<-w>.
19799a22 1164
f102b883 1165Follow the guidelines in the perlstyle(1) manual.
1166
19799a22 1167Always use B<-w>.
1168
f102b883 1169=item Some simple style guidelines
1170
5a964f20 1171The perlstyle manual supplied with Perl has many helpful points.
f102b883 1172
1173Coding style is a matter of personal taste. Many people evolve their
1174style over several years as they learn what helps them write and
1175maintain good code. Here's one set of assorted suggestions that
1176seem to be widely used by experienced developers:
1177
1178Use underscores to separate words. It is generally easier to read
1179$var_names_like_this than $VarNamesLikeThis, especially for
1180non-native speakers of English. It's also a simple rule that works
1181consistently with VAR_NAMES_LIKE_THIS.
1182
1183Package/Module names are an exception to this rule. Perl informally
1184reserves lowercase module names for 'pragma' modules like integer
1185and strict. Other modules normally begin with a capital letter and
1186use mixed case with no underscores (need to be short and portable).
1187
1188You may find it helpful to use letter case to indicate the scope
1189or nature of a variable. For example:
1190
5a964f20 1191 $ALL_CAPS_HERE constants only (beware clashes with Perl vars)
f102b883 1192 $Some_Caps_Here package-wide global/static
1193 $no_caps_here function scope my() or local() variables
1194
1195Function and method names seem to work best as all lowercase.
c47ff5f1 1196e.g., C<< $obj->as_string() >>.
f102b883 1197
1198You can use a leading underscore to indicate that a variable or
1199function should not be used outside the package that defined it.
1200
1201=item Select what to export.
1202
1203Do NOT export method names!
1204
1205Do NOT export anything else by default without a good reason!
1206
1207Exports pollute the namespace of the module user. If you must
1208export try to use @EXPORT_OK in preference to @EXPORT and avoid
1209short or common names to reduce the risk of name clashes.
1210
1211Generally anything not exported is still accessible from outside the
c47ff5f1 1212module using the ModuleName::item_name (or C<< $blessed_ref->method >>)
f102b883 1213syntax. By convention you can use a leading underscore on names to
1214indicate informally that they are 'internal' and not for public use.
1215
1216(It is actually possible to get private functions by saying:
1217C<my $subref = sub { ... }; &$subref;>. But there's no way to call that
1218directly as a method, because a method must have a name in the symbol
1219table.)
1220
1221As a general rule, if the module is trying to be object oriented
1222then export nothing. If it's just a collection of functions then
1223@EXPORT_OK anything but use @EXPORT with caution.
1224
1225=item Select a name for the module.
1226
1227This name should be as descriptive, accurate, and complete as
1228possible. Avoid any risk of ambiguity. Always try to use two or
1229more whole words. Generally the name should reflect what is special
1230about what the module does rather than how it does it. Please use
1231nested module names to group informally or categorize a module.
1232There should be a very good reason for a module not to have a nested name.
1233Module names should begin with a capital letter.
1234
1235Having 57 modules all called Sort will not make life easy for anyone
1236(though having 23 called Sort::Quick is only marginally better :-).
1237Imagine someone trying to install your module alongside many others.
1238If in any doubt ask for suggestions in comp.lang.perl.misc.
1239
1240If you are developing a suite of related modules/classes it's good
1241practice to use nested classes with a common prefix as this will
1242avoid namespace clashes. For example: Xyz::Control, Xyz::View,
1243Xyz::Model etc. Use the modules in this list as a naming guide.
1244
1245If adding a new module to a set, follow the original author's
1246standards for naming modules and the interface to methods in
1247those modules.
1248
165c0277 1249If developing modules for private internal or project specific use,
1250that will never be released to the public, then you should ensure
1251that their names will not clash with any future public module. You
1252can do this either by using the reserved Local::* category or by
1253using a category name that includes an underscore like Foo_Corp::*.
1254
f102b883 1255To be portable each component of a module name should be limited to
125611 characters. If it might be used on MS-DOS then try to ensure each is
1257unique in the first 8 characters. Nested modules make this easier.
1258
1259=item Have you got it right?
1260
1261How do you know that you've made the right decisions? Have you
1262picked an interface design that will cause problems later? Have
1263you picked the most appropriate name? Do you have any questions?
1264
1265The best way to know for sure, and pick up many helpful suggestions,
1266is to ask someone who knows. Comp.lang.perl.misc is read by just about
1267all the people who develop modules and it's the best place to ask.
1268
1269All you need to do is post a short summary of the module, its
1270purpose and interfaces. A few lines on each of the main methods is
1271probably enough. (If you post the whole module it might be ignored
1272by busy people - generally the very people you want to read it!)
1273
1274Don't worry about posting if you can't say when the module will be
1275ready - just say so in the message. It might be worth inviting
1276others to help you, they may be able to complete it for you!
1277
1278=item README and other Additional Files.
1279
1280It's well known that software developers usually fully document the
1281software they write. If, however, the world is in urgent need of
1282your software and there is not enough time to write the full
1283documentation please at least provide a README file containing:
1284
1285=over 10
1286
1287=item *
1288A description of the module/package/extension etc.
1289
1290=item *
1291A copyright notice - see below.
1292
1293=item *
1294Prerequisites - what else you may need to have.
1295
1296=item *
1297How to build it - possible changes to Makefile.PL etc.
1298
1299=item *
1300How to install it.
1301
1302=item *
1303Recent changes in this release, especially incompatibilities
1304
1305=item *
1306Changes / enhancements you plan to make in the future.
1307
1308=back
1309
1310If the README file seems to be getting too large you may wish to
1311split out some of the sections into separate files: INSTALL,
1312Copying, ToDo etc.
1313
1314=over 4
1315
1316=item Adding a Copyright Notice.
1317
1318How you choose to license your work is a personal decision.
1319The general mechanism is to assert your Copyright and then make
1320a declaration of how others may copy/use/modify your work.
1321
1322Perl, for example, is supplied with two types of licence: The GNU
1323GPL and The Artistic Licence (see the files README, Copying, and
1324Artistic). Larry has good reasons for NOT just using the GNU GPL.
1325
1326My personal recommendation, out of respect for Larry, Perl, and the
5a964f20 1327Perl community at large is to state something simply like:
f102b883 1328
1329 Copyright (c) 1995 Your Name. All rights reserved.
1330 This program is free software; you can redistribute it and/or
1331 modify it under the same terms as Perl itself.
1332
1333This statement should at least appear in the README file. You may
1334also wish to include it in a Copying file and your source files.
1335Remember to include the other words in addition to the Copyright.
1336
1337=item Give the module a version/issue/release number.
1338
1339To be fully compatible with the Exporter and MakeMaker modules you
1340should store your module's version number in a non-my package
1341variable called $VERSION. This should be a floating point
1342number with at least two digits after the decimal (i.e., hundredths,
1343e.g, C<$VERSION = "0.01">). Don't use a "1.3.2" style version.
19799a22 1344See L<Exporter> for details.
f102b883 1345
1346It may be handy to add a function or method to retrieve the number.
1347Use the number in announcements and archive file names when
1348releasing the module (ModuleName-1.02.tar.Z).
1349See perldoc ExtUtils::MakeMaker.pm for details.
1350
1351=item How to release and distribute a module.
1352
1353It's good idea to post an announcement of the availability of your
1354module (or the module itself if small) to the comp.lang.perl.announce
1355Usenet newsgroup. This will at least ensure very wide once-off
1356distribution.
1357
2e1d04bc 1358If possible, register the module with CPAN. You should
f102b883 1359include details of its location in your announcement.
1360
1361Some notes about ftp archives: Please use a long descriptive file
5a964f20 1362name that includes the version number. Most incoming directories
f102b883 1363will not be readable/listable, i.e., you won't be able to see your
1364file after uploading it. Remember to send your email notification
1365message as soon as possible after uploading else your file may get
1366deleted automatically. Allow time for the file to be processed
1367and/or check the file has been processed before announcing its
1368location.
1369
1370FTP Archives for Perl Modules:
1371
6cecdcac 1372Follow the instructions and links on:
f102b883 1373
6cecdcac 1374 http://www.perl.com/CPAN/modules/00modlist.long.html
1375 http://www.perl.com/CPAN/modules/04pause.html
f102b883 1376
1377or upload to one of these sites:
1378
6cecdcac 1379 https://pause.kbx.de/pause/
1380 http://pause.perl.org/pause/
f102b883 1381
6cecdcac 1382and notify <modules@perl.org>.
f102b883 1383
1384By using the WWW interface you can ask the Upload Server to mirror
1385your modules from your ftp or WWW site into your own directory on
1386CPAN!
1387
1388Please remember to send me an updated entry for the Module list!
1389
1390=item Take care when changing a released module.
1391
7b8d334a 1392Always strive to remain compatible with previous released versions.
1393Otherwise try to add a mechanism to revert to the
19799a22 1394old behavior if people rely on it. Document incompatible changes.
f102b883 1395
1396=back
1397
1398=back
1399
1400=head2 Guidelines for Converting Perl 4 Library Scripts into Modules
1401
1402=over 4
1403
1404=item There is no requirement to convert anything.
1405
1406If it ain't broke, don't fix it! Perl 4 library scripts should
1407continue to work with no problems. You may need to make some minor
1408changes (like escaping non-array @'s in double quoted strings) but
1409there is no need to convert a .pl file into a Module for just that.
1410
1411=item Consider the implications.
1412
5a964f20 1413All Perl applications that make use of the script will need to
f102b883 1414be changed (slightly) if the script is converted into a module. Is
1415it worth it unless you plan to make other changes at the same time?
1416
1417=item Make the most of the opportunity.
1418
1419If you are going to convert the script to a module you can use the
19799a22 1420opportunity to redesign the interface. The guidelines for module
1421creation above include many of the issues you should consider.
f102b883 1422
1423=item The pl2pm utility will get you started.
1424
1425This utility will read *.pl files (given as parameters) and write
1426corresponding *.pm files. The pl2pm utilities does the following:
1427
1428=over 10
1429
1430=item *
1431Adds the standard Module prologue lines
1432
1433=item *
1434Converts package specifiers from ' to ::
1435
1436=item *
1437Converts die(...) to croak(...)
1438
1439=item *
1440Several other minor changes
1441
1442=back
1443
1444Being a mechanical process pl2pm is not bullet proof. The converted
1445code will need careful checking, especially any package statements.
1446Don't delete the original .pl file till the new .pm one works!
1447
1448=back
1449
1450=head2 Guidelines for Reusing Application Code
1451
1452=over 4
1453
551e1d92 1454=item *
1455
1456Complete applications rarely belong in the Perl Module Library.
f102b883 1457
551e1d92 1458=item *
1459
1460Many applications contain some Perl code that could be reused.
f102b883 1461
1462Help save the world! Share your code in a form that makes it easy
1463to reuse.
1464
551e1d92 1465=item *
1466
1467Break-out the reusable code into one or more separate module files.
f102b883 1468
551e1d92 1469=item *
1470
1471Take the opportunity to reconsider and redesign the interfaces.
1472
1473=item *
f102b883 1474
551e1d92 1475In some cases the 'application' can then be reduced to a small
f102b883 1476
1477fragment of code built on top of the reusable modules. In these cases
1478the application could invoked as:
1479
5a964f20 1480 % perl -e 'use Module::Name; method(@ARGV)' ...
f102b883 1481or
5a964f20 1482 % perl -mModule::Name ... (in perl5.002 or higher)
f102b883 1483
1484=back
1485
1486=head1 NOTE
1487
1488Perl does not enforce private and public parts of its modules as you may
1489have been used to in other languages like C++, Ada, or Modula-17. Perl
1490doesn't have an infatuation with enforced privacy. It would prefer
1491that you stayed out of its living room because you weren't invited, not
1492because it has a shotgun.
1493
1494The module and its user have a contract, part of which is common law,
1495and part of which is "written". Part of the common law contract is
1496that a module doesn't pollute any namespace it wasn't asked to. The
1497written contract for the module (A.K.A. documentation) may make other
1498provisions. But then you know when you C<use RedefineTheWorld> that
1499you're redefining the world and willing to take the consequences.