-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodulelist.current
6892 lines (6061 loc) · 345 KB
/
modulelist.current
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
The Perl 5 Module List $Revision: 3.111 $ $Date: 2002/08/27 23:22:31 $ -*- coding:utf-8 -*-
======================
Maintained by Tim Bunce and Andreas König <[email protected]>
Contents
Introduction
Where Are The Modules Kept?
Playing Your Part
How To Get a More Recent Copy of the List
Editorial Information and Copyright
Part 1 - Modules: Creation, Use and Abuse
1) Perl 5 Module Terminology
2) Guidelines for Module Creation
3) Guidelines for Converting Perl 4 Library Scripts into Modules
4) Guidelines for Reusing Application Code
5) Namespace Coordination
Part 2 - The Perl 5 Module List
1) Module Listing Format
2) Perl Core Modules, Perl Language Extensions and Documentation Tools
3) Development Support
4) Operating System Interfaces, Hardware Drivers
5) Networking, Device Control (modems) and InterProcess Communication
6) Data Types and Data Type Utilities
7) Database Interfaces
8) User Interfaces
9) Interfaces to or Emulations of Other Programming Languages
10) File Names, File Systems and File Locking (see also File Handles)
11) String Processing, Language Text Processing, Parsing and Searching
12) Option, Argument, Parameter and Configuration File Processing
13) Internationalization and Locale
14) Authentication, Security and Encryption
15) World Wide Web, HTML, HTTP, CGI, MIME
16) Server and Daemon Utilities
17) Archiving, Compression and Conversion
18) Images, Pixmap and Bitmap Manipulation, Drawing and Graphing
19) Mail and Usenet News
20) Control Flow Utilities (callbacks and exceptions etc)
21) File Handle, Directory Handle and Input/Output Stream Utilities
22) Microsoft Windows Modules
23) Miscellaneous Modules
24) Interface Modules to Commercial Software
25) Bundles
Part 3 - Standards Cross-reference
3.1) IETF - Internet Engineering Task Force (RFCs)
3.2) ITU - International Telegraph Union (X.*)
3.3) ISO - International Standards Organization (ISO*)
Part 4 - Who's Who and What's Where
4.1) Information / Contact Reference Details
4.2) Perl Frequently Asked Questions (FAQ) Files
======================================================================
Introduction
This document is a semi-formal list of Perl 5 Modules. The Perl 4
concept of packages has been extended in Perl 5 and a new standardised
form of reusable software component has been defined: the Module.
Perl 5 Modules typically conform to certain guidelines which make them
easier to use, reuse, integrate and extend.
This list has two key aims:
- FOR DEVELOPERS: To change duplication of effort into cooperation.
- FOR USERS: To quickly locate existing software which can be reused.
This list includes the Perl 5 standard modules, other completed
modules, work-in-progress modules and would-be-nice-to-have ideas for
modules. It also includes guidelines for those wishing to create new
modules including how to name them.
Where Are The Modules Kept?
Most, but not all, of the modules can be found within CPAN, the
Comprehensive Perl Archive Network of mirrored FTP sites. Within the
CPAN scheme the modules described in this list can be found in the
modules/ directory below the CPAN root directory. CPAN is a worlswide
network of mirrors and you can find your closest mirror in the file
http://www.cpan.org/SITES.html
NOTE: If you can't find what you want, or wish to check that what
you've found is the latest version, or wonder why a module mentioned in
this list is not on CPAN, you should contact the person associated with
the module (and not the maintainers of the archives or this list).
Contact details are given at the start of Part 4.
Playing Your Part
Perl is a huge collaborative effort. Everyone who uses perl is
benefiting from the contributions of many hundreds, maybe thousands, of
people. How much time has perl saved you since you started using it?
Do you have any modules you could share with others? For example, you
may have some perl4 scripts from which generally useful, and reusable,
modules could be extracted. There may be many people who would find
your work very useful. Please play your part and contribute to the Perl
community where you can. [ end of sermon :-]
Help save the world! Please submit new entries and updates to us so we
can keep this list up-to-date. Send the new or corrected entry by
email to [email protected]. Please do not send code to this address.
Instead upload your module, once registered, to the PAUSE site for
forwarding on to CPAN. See section 2, especially 2.6 and 2.11.
How To Get a More Recent Copy of the List
This Module List is fed into CPAN on a semi-regular basis. Its
relative path within a CPAN mirror is in modules/00modlist.long.html .
Editorial Information and Copyright
This document is Copyright (c) 1997-2000 by Tim Bunce and Andreas
König. All rights reserved. Permission to distribute this document, in
full or part, via electronic means (emailed, posted or archived) or
printed copy is granted providing that no charges are involved,
reasonable attempt is made to use the most current version, and all
credits and copyright notices are retained. Requests for other
distribution rights, including incorporation in commercial products,
such as books, magazine articles, or CD-ROMs should be made to
Disclaimer: The content of this document is simply a collection of
information gathered from many sources with little or no checking.
There are NO warranties with regard to this information or its use.
A little background information... I (Tim) created the Module List in
August 1994 and maintained it manually till April 1996. By that time
Andreas had implemented the Perl Authors Upload Server (PAUSE) and it
was happily feeding modules through to the CPAN archive sites (see
http://www.cpan.org/modules/04pause.html for details). Since PAUSE
held a database of module information which could be maintained by
module authors it made sense for the module listing part of the Module
List to be built from that database. In April 1996 Andreas took over
the automatic posting of the Module List and I now maintain the other
parts of the text. We plan to add value to the automation over time.
======================================================================
Part 1 - Modules: Creation, Use and Abuse
=========================================
1) Perl 5 Module Terminology
-------------------------
Perl 5 implements a class using a package, but the presence of a
package doesn't imply the presence of a class. A package is just a
namespace. A class is a package that provides subroutines that can be
used as methods. A method is just a subroutine that expects, as its
first argument, either the name of a package (for "static" methods), or
a reference to something (for "virtual" methods).
A module is a file that (by convention) provides a class of the same
name (sans the .pm), plus an import method in that class that can be
called to fetch exported symbols. This module may implement some of its
methods by loading dynamic C or C++ objects, but that should be totally
transparent to the user of the module. Likewise, the module might set
up an AUTOLOAD function to slurp in subroutine definitions on demand,
but this is also transparent. Only the .pm file is required to exist.
2) Guidelines for Module Creation
------------------------------
2.1 Do similar modules already exist in some form?
If so, please try to reuse the existing modules either in whole or
by inheriting useful features into a new class. If this is not
practical try to get together with the module authors to work on
extending or enhancing the functionality of the existing modules.
A perfect example is the plethora of packages in perl4 for dealing
with command line options.
If you are writing a module to expand an already existing set of
modules, please coordinate with the author of the package. It
helps if you follow the same naming scheme and module interaction
scheme as the original author.
2.2 Try to design the new module to be easy to extend and reuse.
Use blessed references. Use the two argument form of bless to bless
into the class name given as the first parameter of the constructor,
e.g.:
sub new {
my $class = shift;
return bless {}, $class;
}
or even this if you'd like it to be used as either a static
or a virtual method.
sub new {
my $self = shift;
my $class = ref($self) || $self;
return bless {}, $class;
}
Pass arrays as references so more parameters can be added later
(it's also faster). Convert functions into methods where
appropriate. Split large methods into smaller more flexible ones.
Inherit methods from other modules if appropriate.
Avoid class name tests like: die "Invalid" unless ref $ref eq 'FOO'.
Generally you can delete the "eq 'FOO'" part with no harm at all.
Let the objects look after themselves! If it's vital then you can
use the UNIVERSAL methods isa and can. Generally, avoid hardwired
class names as far as possible.
Avoid $r->Class::func() where using @ISA=qw(... Class ...) and
$r->func() would work (see perlbot man page for more details).
Use autosplit or the SelfLoader module so little used or newly added
functions won't be a burden to programs which don't use them. Add
test functions to the module after __END__ either using autosplit or
by saying:
eval join('',<main::DATA>) || die $@ unless caller();
Does your module pass the 'empty sub-class' test? If you say
"@SUBCLASS::ISA = qw(YOURCLASS);" your applications should be able
to use SUBCLASS in exactly the same way as YOURCLASS. For example,
does your application still work if you change: $obj = new YOURCLASS;
into: $obj = new SUBCLASS; ?
Avoid keeping any state information in your packages. It makes it
difficult for multiple other packages to use yours. Keep state
information in objects.
Always use -w. Try to "use strict;" (or "use strict qw(...);").
Remember that you can add "no strict qw(...);" to individual blocks
of code which need less strictness. Always use -w. Always use -w!
Follow the guidelines in the perlstyle(1) manual.
2.3 Some simple style guidelines
The perlstyle manual supplied with perl has many helpful points.
Coding style is a matter of personal taste. Many people evolve their
style over several years as they learn what helps them write and
maintain good code. Here's one set of assorted suggestions that
seem to be widely used by experienced developers:
Use underscores to separate words. It is generally easier to read
$var_names_like_this than $VarNamesLikeThis, especially for
non-native speakers of English. It's also a simple rule that works
consistently with VAR_NAMES_LIKE_THIS.
Package/Module names are an exception to this rule. Perl informally
reserves lowercase module names for 'pragma' modules like integer
and strict. Other modules normally begin with a capital letter and
use mixed case with no underscores (need to be short and portable).
You may find it helpful to use letter case to indicate the scope
or nature of a variable. For example:
$ALL_CAPS_HERE constants only (beware clashes with perl vars)
$Some_Caps_Here package-wide global/static
$no_caps_here function scope my() or local() variables
Function and method names seem to work best as all lowercase.
E.g., $obj->as_string().
You can use a leading underscore to indicate that a variable or
function should not be used outside the package that defined it.
For method calls use either
$foo = new Foo $arg1, $arg2; # no parentheses
$foo = Foo->new($arg1, $arg2);
but avoid the ambiguous form
$foo = new Foo($arg1, $arg2); # Foo() looks like function call
It can be very helpful if the names of the classes that your module
uses can be specified as parameters. Consider:
$dog_class = $args{dog_class} || 'Dog';
$spot = $dog_class->new(...);
This allows the user of your module to specify an alternative class
(typically a subclass of the one you would normally have used).
On how to report constructor failure, Larry said:
I tend to see it as exceptional enough that I'll throw a real Perl
exception (die) if I can't construct an object. This has a couple
of advantages right off the bat. First, you don't have to check the
return value of every constructor. Just say "$fido = new Doggie;"
and presume it succeeded. This leads to clearer code in most cases.
Second, if it does fail, you get a better diagnostic than just the
undefinedness of the return value. In fact, the exception it throws
may be quite rich in "stacked" error messages, if it's rethrowing an
exception caught further in.
And you can always catch the exception if it does happen using eval {}.
If, on the other hand, you expect your constructor to fail a goodly
part of the time, then you shouldn't use exceptions, but you should
document the interface so that people will know to check the return
value. You don't need to use defined(), since a constructor would
only return a true reference or a false undef. So good Perl style
for checking a return value would simply say
$conn = new Connection $addr
or die "Couldn't create Connection";
In general, make as many things meaningful in a Boolean context as
you can. This leads to straightforward code. Never write anything
like
if (do_your_thing() == OK)
in Perl. That's just asking for logic errors and domain errors.
Just write
if (do_your_thing())
Perl is designed to help you eschew obfuscation, if that's your thing.
2.4 Select what to export.
Do NOT export method names!
Do NOT export anything else by default without a good reason!
Exports pollute the namespace of the module user. If you must
export try to use @EXPORT_OK in preference to @EXPORT and avoid
short or common names to reduce the risk of name clashes.
Generally anything not exported is still accessible from outside the
module using the ModuleName::item_name (or $blessed_ref->method)
syntax. By convention you can use a leading underscore on names to
informally indicate that they are 'internal' and not for public use.
(It is actually possible to get private functions by saying:
my $subref = sub { ... }; &$subref; But there's no way to call that
directly as a method, since a method must have a name in the symbol
table.)
As a general rule, if the module is trying to be object oriented
then export nothing. If it's just a collection of functions then
@EXPORT_OK anything but use @EXPORT with caution.
2.5 Select a name for the module.
This name should be as descriptive, accurate and complete as
possible. Avoid any risk of ambiguity. Always try to use two or
more whole words. Generally the name should reflect what is special
about what the module does rather than how it does it.
Having 57 modules all called Sort will not make life easy for anyone
(though having 23 called Sort::Quick is only marginally better :-).
Imagine someone trying to install your module alongside many others.
If in any doubt ask for suggestions in comp.lang.perl.modules or
Please use a nested module name to informally group or categorise
a module, e.g., placing a sorting module into a Sort:: category.
A module should have a very good reason not to have a nested name.
Please avoid using more than one level of nesting for module names
(packages or classes within modules can, of course, use any number).
Module names should begin with a capital letter. Lowercase names are
reserved for special modules such as pragmas (e.g., lib and strict).
Note that module names are not related to class hierarchies.
A module name Foo::Bar does not in any way imply that Foo::Bar
inherits from Foo. Nested names are simply used to provide some
useful categorisation for humans. The same is generally true for
all package names.
Since the CPAN is huge and growing daily, it's essential that
module authors choose names which lend themselves to browsing.
That means minimizing acronyms, cute names, and jargon. Also,
don't make up a new top level category unless you have a good
reason; please choose an already-existing category when
possible. Send mail to [email protected] before you upload, so
we can help you select a name.
If you insist on a name that we consider inappropriate, we
won't prevent you from uploading your module -- but it'll
remain in your "author" directory and won't be directly visible
from CPAN/modules/by-module.
We appreciate the efforts of the contributors who have helped
make the CPAN the world's largest reusable code repository.
Please help us enhance it by working with us to choose the
best name possible.
If you are developing a suite of related modules/classes it's good
practice to use nested classes with a common prefix as this will
avoid namespace clashes. For example: Xyz::Control, Xyz::View,
Xyz::Model etc. Use the modules in this list as a naming guide.
If adding a new module to a set, follow the original author's
standards for naming modules and the interface to methods in
those modules.
If developing modules for private internal or project specific use,
that will never be released to the public, then you should ensure
that their names will not clash with any future public module. You
can do this either by using the reserved Local::* category or by
using an underscore in the top level name like Foo_Corp::*.
To be portable each component of a module name should be limited to
11 characters. If it might be used on DOS then try to ensure each is
unique in the first 8 characters. Nested modules make this easier.
2.6 Have you got it right?
How do you know that you've made the right decisions? Have you
picked an interface design that will cause problems later? Have
you picked the most appropriate name? Do you have any questions?
The best way to know for sure, and pick up many helpful suggestions,
is to ask someone who knows. The comp.lang.perl.modules Usenet
newsgroup is read by just about all the people who develop modules
and it's generally the best place to ask first. If you need more
help then try [email protected].
All you need to do is post a short summary of the module, its
purpose and interfaces. A few lines on each of the main methods is
probably enough. (If you post the whole module it might be ignored
by busy people - generally the very people you want to read it!)
Don't worry about posting if you can't say when the module will be
ready - just say so in the message. It might be worth inviting
others to help you, they may be able to complete it for you!
2.7 README and other Additional Files.
It's well known that software developers usually fully document the
software they write. If, however, the world is in urgent need of
your software and there is not enough time to write the full
documentation please at least provide a README file containing:
- A description of the module/package/extension etc.
- A copyright notice - see below.
- Prerequisites - what else you may need to have.
- How to build it - possible changes to Makefile.PL etc.
- How to install it.
- Recent changes in this release, especially incompatibilities
- Changes / enhancements you plan to make in the future.
If the README file seems to be getting too large you may wish to
split out some of the sections into separate files: INSTALL,
Copying, ToDo etc.
2.8 Adding a Copyright Notice.
How you choose to licence your work is a personal decision.
The general mechanism is to assert your Copyright and then make
a declaration of how others may copy/use/modify your work.
Perl, for example, is supplied with two types of licence: The GNU
GPL and The Artistic License (see the files README, Copying and
Artistic). Larry has good reasons for NOT just using the GNU GPL.
My personal recommendation, out of respect for Larry, Perl and the
perl community at large is to simply state something like:
Copyright (c) 1997 Your Name. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
This statement should at least appear in the README file. You may
also wish to include it in a Copying file and your source files.
Remember to include the other words in addition to the Copyright.
2.9 Give the module a version/issue/release number.
To be fully compatible with the Exporter and MakeMaker modules you
should store your module's version number in a non-my package
variable called $VERSION. This should be a valid floating point
number with at least two digits after the decimal (ie hundredths,
e.g, $VERSION = "0.01"). See Exporter.pm for details.
Don't use a "1.3.2" style version directly. If you use RCS or a
similar system which supports multilevel versions/branches you can
use this (but put it all on one line for MakeMaker VERSION_FROM):
$VERSION = do { my @r=(q$Revision: 3.111 $=~/\d+/g);
sprintf "%d."."%03d"x$#r,@r };
It may be handy to add a function or method to retrieve the number.
Use the number in announcements and archive file names when
releasing the module (ModuleName-1.02.tar.gz).
See perldoc ExtUtils::MakeMaker.pm for details.
2.10 Listing Prerequisites in a Bundle module
If your module needs some others that are available on CPAN, you
might consider creating a 'bundle' module that lists all the
prerequisites in a standardized way. Automatic installation software
such as the CPAN.pm module can take advantage of such a listing and
enable your users to install all prerequisites and your own module
with one single command. See the CPAN.pm module for details.
2.11 How to release and distribute a module.
By far the best way to release modules is to register yourself with
the Perl Authors Upload Server (PAUSE). By registering with PAUSE
you will be able to easily upload (or mirror) your modules to the
PAUSE server from where they will be mirrored to CPAN sites across
the planet.
It's good idea to post an announcement of the availability of your
module to the comp.lang.perl.announce Usenet newsgroup. This will
at least ensure very wide once-off distribution.
If not using PAUSE you should place the module into a major ftp
archive and include details of it's location in your announcement.
Some notes about ftp archives: Please use a long descriptive file
name which includes the version number. Most incoming directories
will not be readable/listable, i.e., you won't be able to see your
file after uploading it. Remember to send your email notification
message as soon as possible after uploading else your file may get
deleted automatically. Allow time for the file to be processed
and/or check the file has been processed before announcing its
location.
FTP Archives for Perl Modules:
Follow the instructions and links on
http://www.cpan.org/modules/04pause.html
or upload to:
ftp://pause.kbx.de/incoming
and notify [email protected].
By using the PAUSE WWW interface you can ask the Upload Server to
mirror your modules from your ftp or WWW site into your own
directory on CPAN. Please remember to send us an updated entry for
the Module list!
2.12 Take care when changing a released module.
Always strive to remain compatible with previous released versions
(see 2.2 above) Otherwise try to add a mechanism to revert to the
old behaviour if people rely on it. Document incompatible changes.
3) Guidelines for Converting Perl 4 Library Scripts into Modules
-------------------------------------------------------------
3.1 There is no requirement to convert anything.
If it ain't broke, don't fix it! Perl 4 library scripts should
continue to work with no problems. You may need to make some minor
changes (like escaping non-array @'s in double quoted strings) but
there is no need to convert a .pl file into a Module for just that.
See perltrap.pod for details of all known perl4-to-perl5 issues.
3.2 Consider the implications.
All the perl applications which make use of the script will need to
be changed (slightly) if the script is converted into a module. Is
it worth it unless you plan to make other changes at the same time?
3.3 Make the most of the opportunity.
If you are going to convert the script to a module you can use the
opportunity to redesign the interface. The 'Guidelines for Module
Creation' above include many of the issues you should consider.
3.4 The pl2pm utility will get you started.
This utility will read *.pl files (given as parameters) and write
corresponding *.pm files. The pl2pm utilities does the following:
- Adds the standard Module prologue lines
- Converts package specifiers from ' to ::
- Converts die(...) to croak(...)
- Several other minor changes
Being a mechanical process pl2pm is not bullet proof. The converted
code will need careful checking, especially any package statements.
Don't delete the original .pl file till the new .pm one works!
4) Guidelines for Reusing Application Code
---------------------------------------
4.1 Complete applications rarely belong in the Perl Module Library.
4.2 Many applications contain some perl code which could be reused.
Help save the world! Share your code in a form that makes it easy
to reuse.
4.3 Break-out the reusable code into one or more separate module files.
4.4 Take the opportunity to reconsider and redesign the interfaces.
4.5 In some cases the 'application' can then be reduced to a small
fragment of code built on top of the reusable modules. In these
cases the application could invoked as:
perl -MModule::Name -e 'func(@ARGV)'
5) Namespace Coordination
The maintainers of the module list are not the Internic for perl
namespaces. They do neither sell namespaces nor can they establish
property rights. What they try to do is to minimize namespace clashes
and maximize usablility of the CPAN archive by setting up a catalogue
of modules and control the indexers. Time permitting, they will also
try to give advice for what they think is a proper usage of the
namespace.
It is an important part of the namespace concept that the module list
maintainers do not guarantee to you that somebody else won't use the,
say, Foo::Bar namespace. The upload area is not censored except for
abuse. People are free to upload any modules they like. Instead, there
are several levels of protection for your namespaces:
a) The most important is the module list which actually lists and
proclaims your namespace.
b) The second is the indexing mechanism of the CPAN. Modules are
indexed on a first-come-first-serve basis. The module namespace
that is uploaded for the first time ever gets indexed, but not the
module of the second one who tries to use the same namespace.
c) As the whole process is trying to benefit the community, all
parties are subject to a wider monitoring within the community.
This is sometimes referred to as security by visibility.
d) So the next level of namespace protection is the common sense. Your
own common sense. Help to save the world. If you get the impression
that something goes wrong with regard to namespaces, please write
to [email protected] and let them know.
e) The perhaps most interesting namespace protection is provided by
the perl symbol table itself. A namespace Foo:: is just a package
name and its relationship to a namespace Foo::Bar:: is not
predetermined whatsoever. The two namespaces can be closely or
loosely related or not related at all, but what's most important,
they can be writen by different authors who may work rather
independently from each other. So if you have registered any
namespace, it does not mean that you own the whole namespace tree
that starts there. If you are registered as the contact for
Foo::Bar, you are not necessarily also associated with
Foo::Bar::Baz.
f) In a few rare cases the module list people restrict indexing of
certain categories. For example:
DBI::* under the control of Tim Bunce
Sun::* under the control of Sun Microsystems
=======================================================================
Part 2 - The Perl 5 Module List
===============================
The remainder of this document is divided up into sections. Each
section deals with a particular topic and lists all known modules
related to that topic. Modules are only listed in one section so
check all sections that might related to your particular needs.
All the information corresponds to the latest updates we have received.
We don't record the version number or release dates of the listed
Modules. Nor do we record the locations of these Modules. Consult the
contact, try the usual perl CPAN sites or ask in comp.lang.perl.modules.
Please do *not* ask us directly, we simply don't have the time. Sorry.
1) Module Listing Format
Each Module listing is very short. The main goal is to simply publish
the existence of the modules, or ideas for modules, and enough contact
information for you to find out more. Each listing includes some
characters which convey (approximate) basic status information.
For example:
Name DSLIP Description Info
------------- ----- -------------------------------------------- -----
Fcntl Sdcfp Defines fcntl() constants (see File::Lock) JHI
Where the 'DSLIP' characters have the following meanings:
D - Development Stage (Note: *NO IMPLIED TIMESCALES*):
i - Idea, listed to gain consensus or as a placeholder
c - under construction but pre-alpha (not yet released)
a/b - Alpha/Beta testing
R - Released
M - Mature (no rigorous definition)
S - Standard, supplied with Perl 5
S - Support Level:
m - Mailing-list
d - Developer
u - Usenet newsgroup comp.lang.perl.modules
n - None known, try comp.lang.perl.modules
L - Language Used:
p - Perl-only, no compiler needed, should be platform independent
c - C and perl, a C compiler will be needed
h - Hybrid, written in perl with optional C code, no compiler needed
+ - C++ and perl, a C++ compiler will be needed
o - perl and another language other than C or C++
I - Interface Style
f - plain Functions, no references used
h - hybrid, object and function interfaces available
n - no interface at all (huh?)
r - some use of unblessed References or ties
O - Object oriented using blessed references and/or inheritance
P - Public License
p - Standard-Perl: user may choose between GPL and Artistic
g - GPL: GNU General Public License
l - LGPL: "GNU Lesser General Public License" (previously known as "GNU Library
General Public License")
b - BSD: The BSD License
a - Artistic license alone
o - other (but distribution allowed without restrictions)
DISCLAIMER: The status of the Public License field is there for
informational purpose only and does not constitute a legal binding of
any kind. To obtain proper information about the Licencing terms of a
module and its accompanying files, please refer to the distribution of
the modules or contact the author as appropriate. Please inform
[email protected] if you encounter any mismatch between the contents of
the Public License field and what the distribution actually says about
it.
Where letters are missing they can usually be inferred from the
others. For example 'i' implies 'id', 'S' implies 'Su'.
The Info column gives a contact reference 'tag'. Lookup this tag in
the "Information / Contact Reference Details" section in Pert 3 of
this document. If no contact is given always try asking in
comp.lang.perl.modules.
Most Modules are nested in categories such as IPC::Open2 and IPC::Open3.
These are shown as 'IPC::' on one line then each module listed below
with a '::' prefix.
Ideas For Adoption
Modules listed as in the 'i' Development Stage with no contact
reference are ideas without an owner. Feel free to 'adopt' these but
please let me know so that we can update the list and thus inform anyone
else who might be interested. Adoption simply means that you either
hope to implement the module one day or would like to cooperate with
anyone else who might be interested in implementing it.
Cooperation
Similarly, if an idea that interests you has been adopted by someone
please contact them so you can share ideas. Just because an idea has
been adopted does NOT imply that it's going to be implemented. Just
because a module is listed and being implemented does NOT mean it'll
get finished. Waiting silently in the hope that the Module will appear
one day is unlikely to be fruitful! Offer to help. Cooperate. Pool your
efforts. Go on, try it!
The same applies to modules in all states. Most modules are developed
in limited spare time. If you're interested in a module don't just wait
for it to happen, offer to help.
Module developers should feel free to announce incomplete work early.
If you're not going to be able to spend much time on something then say
so. If you invite cooperation maybe someone will implement it for you!
_______________________________________________________________________
2) Perl Core Modules, Perl Language Extensions and Documentation Tools
Name DSLIP Description Info
------------ ----- -------------------------------------------- ----
CORE Sucf? Internal package for perl native functions P5P
UNIVERSAL SucOp Internal universal base-class P5P
SUPER SucO? Internal class to access superclass methods P5P
DynaLoader SucO? Dynamic loader for shared libraries P5P
AutoLoader SupO? Automatic function loader (using AutoSplit) P5P
SelfLoader SupO? Automatic function loader (using __DATA__) P5P
Exporter SupO? Implements default import method for modules P5P
Carp Supf? Throw exceptions outside current package P5P
Config Supf? Stores details of perl build configuration P5P
English Supf? Defines English names for special variables P5P
Symbol SupO? Create 'anonymous' symbol (typeglobs) refs CHIPS
Opcode Supf? Disable named opcodes when compiling code P5P
Taint bdpf? Utilities related to tainting PHOENIX
Perl Pragmatic Modules
constant Supf? Define compile-time constants P5P
diagnostics Sdpf? For reporting perl diagnostics in full form TOMC
enum cdpf? resemble enumerated types in C ZENIN
integer Supf? Controls float vs. integer arithmetic P5P
less Supf? Controls optimisations (yet unimplemented) P5P
lib Supf? Simple way to add/delete directories in @INC P5P
namespace Rdpnp Perl pragma to use like C++ namespace alias AMICHAUER
overload SdpO? Overload perl operators for new data types ILYAZ
sigtrap Supf? For trapping an abort and giving a traceback P5P
strict Supf? Controls averments (similar to pragmas) P5P
subs Supf? use subs qw(x y); is short for sub x; sub y; P5P
vars Supf? predeclare variable names P5P
Experimental pragmatic modules live in the ex:: namespace
ex::
::implements RdpO? Study in Polymorphism PDCAWLEY
::interface RdpO? Another study in polymorphism PDCAWLEY
::override Rdpf? perl pragma to override core functions CTWETEN
::caution bdpn? Same as use warnings; use strict; YVES
ex::constant::
::vars Rdph? Perl pragma to create readonly variables CTWETEN
Perl Language Extensions
Alias bdcf? Convenient access to data/code via aliases GSAR
End RdpO? Generalized END {}. ABIGAIL
Error adpOp Error/exception handling in an OO-ish way UARUN
NEXT RdpO? Perl5 implementation of NEXT (RFC190) DCONWAY
Perl adcO? Create Perl interpreters from within Perl GSAR
Protect bdpf? declare subs private or member JDUNCAN
Safe SdcO? Restrict eval'd code to safe subset of ops MICB
Softref bdcf? Extension for weak/soft referenced SVs ILYAZ
Attribute::
::Handlers RdpO? Simpler definition of attribute handlers ABERGMAN
::Types RdpO? Attributes that confer type on variables DCONWAY
::Memoize RdpOp Attribute interface to Memoize.pm MARCEL
::TieClasses RdpOp attribute wrappers for CPAN Tie classes MARCEL
::Abstract RdpOp implement abstract methods with attributes MARCEL
::Overload RdpOp Attribute that makes overloading easier MARCEL
::Deprecated RdpOp Mark deprecated methods KASEI
::Signature bdphp Signatures on methods and subroutines JDUNCAN
Exporter::
::Import Rdpn? Alternate symbol exporter GARROW
::Options adpO? Extends Exporter to handle use-line options YSTH
::PkgAlias adpf? Load a module into multiple namespaces JDPORTER
Inline bdp?p Write Perl subroutines in other languages INGY
Inline::
::CPR adpn? C Perl Run - Embed Perl in C, ala Inline INGY
::C bdpnp Write Perl subroutines in C INGY
::CPP bdpO? Easy implementation of C++ extensions NEILW
::Python adcO? Easy implementation of Python extensions NEILW
::Tcl adcf? Write Perl subroutines in Tcl RRS
::Java amhpp Easy implementation of Java extensions PATL
::ASM adpO? Write Perl subroutines in Assembler NEILW
::Struct adpO? Bind C structures directly to Perl. NEILW
::Files RdpO? Multiple virtual files after __END__ DCONWAY
::Guile amhhp Inline module for Guile Scheme interpreter SAMTREGAR
Regexp::
::Common RdpO? Provide commonly requested regular expr. ABIGAIL
::Shellish RdpO? Shell-like regular expressions RBS
::Func adpf? Replace =~, !~, m//, s/// with functions NWIGER
Safe::
::Hole bdcO? Exec subs in the original package from Safe SEYN
Symbol::
::Table RdpO? OO interface to package symbols GARROW
Symbol::Approx::
::Sub Rmphp Call subroutines using approximate names DAVECROSS
The Perl Compiler
B aucO? The Perl Compiler MICB
O aucO? Perl Compiler frontends MICB
B::
::Fathom bdpO? Estimate the readability of Perl code KSTAR
::Graph bdpr? Perl Compiler backend to diagram OP trees SMCCAM
::LexInfo bdcO? Show info about subroutine lexical variables DOUGM
::Size bdcO? Measure size of Perl OPs and SVs DOUGM
::TerseSize bdpO? Info about ops and their (estimated) size DOUGM
Source Code Filters
Filter::Util::
::Exec bdcf? Interface for creation of coprocess Filters PMQS
::Call bdcf? Interface for creation of Perl Filters PMQS
Filter::
::exec bdcf? Filters script through an external command PMQS
::sh bdcf? Filters script through a shell command PMQS
::cpp bdcf? Filters script through C preprocessor PMQS
::tee bdcf? Copies to file perl source being compiled PMQS
::decrypt bdcf? Template for a perl source decryption filter PMQS
::Simple RdpO? Simplified source filtering DCONWAY
::constant idpnp constant mod working like real Pre Processor MZSANFORD
::Trigraph bdpnp Understand ANSI C trigraphs in Perl source. KASEI
PerlIO Rucnp On demand loader for PerlIO layers P5P
PerlIO::
::gzip RdcO? provide a PerlIO layer to gzip/gunzip NWCLARK
Thread support (note that these are experimental, i.e. pre-alpha)
Thread cuhO? Manipulate threads in Perl (EXPERIMENTAL) P5P
Thread::
::Group bdph? Wait()-like and grouping functions DSUGAL
::Pool bdpOp Worker pools to run Perl code asynchronously ELIZABETH
::Queue cuph? Thread-safe queues P5P
::Semaphore cuph? Thread-safe semaphores P5P
::Signal cuhh? A thread which runs signal handlers reliably P5P
::Specific cuhh? Thread-specific keys P5P
::RWLock RdpOp rwlock implementation for perl threads AFERBER
::IO i ? IO routines DSUGAL
::Object i ? OO routines DSUGAL
Module Support
Module::
::Reload Rdpf? Reloads files in %INC based on timestamps JPRIT
::InstalledVersion bdpOp Find version number of installed module SKUD
::Use bdpnp Tracks modules loaded by a script JSMITH
::Signature cdpfp Module signature file manipulation AUTRIJUS
Documentation Tools:
Pod::
::Diff cdpf? compare two POD files and report diff IANC
::DocBook adpO? convert POD to and from DocBook MBERENDS
::HTML cdpr? converter to HTML KJALB
::HTML2Pod RdpOp Translate HTML into POD SBURKE
::Hlp RdpO? Convert POD to formatted VMS Help text PVHP
::Index cdpr? index generator KJALB
::LaTeX bdpOp Converts pod to latex with Pod::Parser TJENNESS
::Latex cdpr? converter to LaTeX KJALB
::Lyx adpO? A pod to LyX format conversion class RICHARDJ
::MIF adpO? converter to FrameMaker MIF JNH
::Man cdpr? converter to man page KJALB
::PP adpOa A Pod pre-processor RAM
::Parser bdpO? Base class for parsing pod syntax BRADAPP
::Pdf bdpf? Converter to PDF AJFRY
::Pod cdpr? converter to canonical pod KJALB
::RTF cdpr? converter to RTF KJALB
::Rtf RdpO? Converter from POD to Rich Text Format PVHP
::Sdf cdpf? converter to SDF IANC
::Select bdpf? Print only selected sections of pod docs BRADAPP
::Simplify cdpr? Common pod parsing code KJALB
::Texinfo cdpr? converter to texinfo KJALB
::Text Supf? convert POD data to formatted ASCII text TOMC
::Usage bdpf? Print Usage messages based on your own pod BRADAPP
::XML RdpO? Generate XML from POD MSERGEANT
::Tree RdpOp Create a static syntax tree for a POD SWMCD
::Checker RdpO? Check pod documents for syntax errors BRADAPP
::POM RdpOp Pod Object Model ABW
Perl6::
::Variables RdpO? Perl 6 variable syntax for Perl 5 DCONWAY
::Interpolators bdpnp Use Perl 6 function-interpolation syntax BRENTDAX
::Parameters bdpnp Use Perl 6-style named parameters BRENTDAX
Concurrent adpOp Concurrent and Remotable Objects in Perl VIPUL
Acme::
::Buffy Rdphp An encoding scheme for Buffy fans LBROCARD
Acme::Morse::
::Audible Rdpnp Audio(Morse) Programming with Perl ITRIVIZKI
_______________________________________________________________________