56263aad3f947e4f85f8c93cc92436c7c6fbe738
[perl.git] / dist / Module-CoreList / lib / Module / CoreList.pod
1 =head1 NAME
2
3 Module::CoreList - what modules shipped with versions of perl
4
5 =head1 SYNOPSIS
6
7  use Module::CoreList;
8
9  print $Module::CoreList::version{5.00503}{CPAN}; # prints 1.48
10
11  print Module::CoreList->first_release('File::Spec');         # prints 5.00405
12  print Module::CoreList->first_release_by_date('File::Spec'); # prints 5.005
13  print Module::CoreList->first_release('File::Spec', 0.82);   # prints 5.006001
14
15  if (Module::CoreList::is_core('File::Spec')) {
16    print "File::Spec is a core module\n";
17  }
18
19  print join ', ', Module::CoreList->find_modules(qr/Data/);
20     # prints 'Data::Dumper'
21  print join ', ',
22             Module::CoreList->find_modules(qr/test::h.*::.*s/i, 5.008008);
23     # prints 'Test::Harness::Assert, Test::Harness::Straps'
24
25  print join ", ", @{ $Module::CoreList::families{5.005} };
26     # prints "5.005, 5.00503, 5.00504"
27
28 =head1 DESCRIPTION
29
30 Module::CoreList provides information on which core and dual-life modules shipped
31 with each version of L<perl>.
32
33 It provides a number of mechanisms for querying this information.
34
35 There is a utility called L<corelist> provided with this module
36 which is a convenient way of querying from the command-line.
37
38 There is a functional programming API available for programmers to query
39 information.
40
41 Programmers may also query the contained hash structures to find relevant
42 information.
43
44 =head1 FUNCTIONS API
45
46 These are the functions that are available, they may either be called as functions or class methods:
47
48   Module::CoreList::first_release('File::Spec'); # as a function
49
50   Module::CoreList->first_release('File::Spec'); # class method
51
52 =over
53
54 =item C<first_release( MODULE )>
55
56 Behaviour since version 2.11
57
58 Requires a MODULE name as an argument, returns the perl version when that module first
59 appeared in core as ordered by perl version number or undef ( in scalar context )
60 or an empty list ( in list context ) if that module is not in core.
61
62 =item C<first_release_by_date( MODULE )>
63
64 Requires a MODULE name as an argument, returns the perl version when that module first
65 appeared in core as ordered by release date or undef ( in scalar context )
66 or an empty list ( in list context ) if that module is not in core.
67
68 =item C<find_modules( REGEX, [ LIST OF PERLS ] )>
69
70 Takes a regex as an argument, returns a list of modules that match the regex given.
71 If only a regex is provided applies to all modules in all perl versions. Optionally
72 you may provide a list of perl versions to limit the regex search.
73
74 =item C<find_version( PERL_VERSION )>
75
76 Takes a perl version as an argument. Returns that perl version if it exists or C<undef>
77 otherwise.
78
79 =item C<is_core( MODULE, [ MODULE_VERSION, [ PERL_VERSION ] ] )>
80
81 Available in version 2.99 and above.
82
83 Returns true if MODULE was bundled with the specified version of Perl.
84 You can optionally specify a minimum version of the module,
85 and can also specify a version of Perl.
86 If a version of Perl isn't specified,
87 C<is_core()> will use the numeric version of Perl that is running (ie C<$]>).
88
89 If you want to specify the version of Perl, but don't care about
90 the version of the module, pass C<undef> for the module version:
91
92 =item C<is_deprecated( MODULE, PERL_VERSION )>
93
94 Available in version 2.22 and above.
95
96 Returns true if MODULE is marked as deprecated in PERL_VERSION.  If PERL_VERSION is
97 omitted, it defaults to the current version of Perl.
98
99 =item C<deprecated_in( MODULE )>
100
101 Available in version 2.77 and above.
102
103 Returns the first PERL_VERSION where the MODULE was marked as deprecated. Returns C<undef>
104 if the MODULE has not been marked as deprecated.
105
106 =item C<removed_from( MODULE )>
107
108 Available in version 2.32 and above
109
110 Takes a module name as an argument, returns the first perl version where that module
111 was removed from core. Returns undef if the given module was never in core or remains
112 in core.
113
114 =item C<removed_from_by_date( MODULE )>
115
116 Available in version 2.32 and above
117
118 Takes a module name as an argument, returns the first perl version by release date where that module
119 was removed from core. Returns undef if the given module was never in core or remains
120 in core.
121
122 =item C<changes_between( PERL_VERSION, PERL_VERSION )>
123
124 Available in version 2.66 and above.
125
126 Given two perl versions, this returns a list of pairs describing the changes in
127 core module content between them.  The list is suitable for storing in a hash.
128 The keys are library names and the values are hashrefs.  Each hashref has an
129 entry for one or both of C<left> and C<right>, giving the versions of the
130 library in each of the left and right perl distributions.
131
132 For example, it might return these data (among others) for the difference
133 between 5.008000 and 5.008001:
134
135   'Pod::ParseLink'  => { left => '1.05', right => '1.06' },
136   'Pod::ParseUtils' => { left => '0.22', right => '0.3'  },
137   'Pod::Perldoc'    => {                 right => '3.10' },
138   'Pod::Perldoc::BaseTo' => {            right => undef  },
139
140 This shows us two libraries being updated and two being added, one of which has
141 an undefined version in the right-hand side version.
142
143 =back
144
145 =head1 DATA STRUCTURES
146
147 These are the hash data structures that are available:
148
149 =over
150
151 =item C<%Module::CoreList::version>
152
153 A hash of hashes that is keyed on perl version as indicated
154 in $].  The second level hash is module => version pairs.
155
156 Note, it is possible for the version of a module to be unspecified,
157 whereby the value is C<undef>, so use C<exists $version{$foo}{$bar}> if
158 that's what you're testing for.
159
160 Starting with 2.10, the special module name C<Unicode> refers to the version of
161 the Unicode Character Database bundled with Perl.
162
163 =item C<%Module::CoreList::delta>
164
165 Available in version 3.00 and above.
166
167 C<%Module::CoreList::version> is implemented via C<Module::CoreList::TieHashDelta>
168 using this hash of delta changes.
169
170 It is a hash of hashes that is keyed on perl version. Each keyed hash will have the
171 following keys:
172
173   delta_from - a previous perl version that the changes are based on
174   changed    - a hash of module/versions that have changed
175   removed    - a hash of modules that have been removed
176
177 =item C<%Module::CoreList::released>
178
179 Keyed on perl version this contains ISO
180 formatted versions of the release dates, as gleaned from L<perlhist>.
181
182 =item C<%Module::CoreList::families>
183
184 New, in 1.96, a hash that
185 clusters known perl releases by their major versions.
186
187 =item C<%Module::CoreList::deprecated>
188
189 A hash of hashes keyed on perl version and on module name.
190 If a module is defined it indicates that that module is
191 deprecated in that perl version and is scheduled for removal
192 from core at some future point.
193
194 =item C<%Module::CoreList::upstream>
195
196 A hash that contains information on where patches should be directed
197 for each core module.
198
199 UPSTREAM indicates where patches should go. C<undef> implies
200 that this hasn't been discussed for the module at hand.
201 C<blead> indicates that the copy of the module in the blead
202 sources is to be considered canonical, C<cpan> means that the
203 module on CPAN is to be patched first. C<first-come> means
204 that blead can be patched freely if it is in sync with the
205 latest release on CPAN.
206
207 =item C<%Module::CoreList::bug_tracker>
208
209 A hash that contains information on the appropriate bug tracker
210 for each core module.
211
212 BUGS is an email or url to post bug reports.  For modules with
213 UPSTREAM => 'blead', use perl5-porters@perl.org.  rt.cpan.org
214 appears to automatically provide a URL for CPAN modules; any value
215 given here overrides the default:
216 http://rt.cpan.org/Public/Dist/Display.html?Name=$ModuleName
217
218 =back
219
220 =head1 CAVEATS
221
222 Module::CoreList currently covers the 5.000, 5.001, 5.002, 5.003_07,
223 5.004, 5.004_05, 5.005, 5.005_03, 5.005_04, 5.6.0, 5.6.1, 5.6.2, 5.7.3,
224 5.8.0, 5.8.1, 5.8.2, 5.8.3, 5.8.4, 5.8.5, 5.8.6, 5.8.7, 5.8.8, 5.8.9,
225 5.9.0, 5.9.1, 5.9.2, 5.9.3, 5.9.4, 5.9.5, 5.10.0, 5.10.1, 5.11.0, 5.11.1,
226 5.11.2, 5.11.3, 5.11.4, 5.11.5, 5.12.0, 5.12.1, 5.12.2, 5.12.3, 5.12.4,
227 5.12.5, 5.13.0, 5.13.1, 5.13.2, 5.13.3, 5.13.4, 5.13.5, 5.13.6, 5.13.7,
228 5.13.8, 5.13.9, 5.13.10, 5.13.11, 5.14.0, 5.14.1, 5.14.2 5.14.3, 5.14.4,
229 5.15.0, 5.15.1, 5.15.2, 5.15.3, 5.15.4, 5.15.5, 5.15.6, 5.15.7, 5.15.8,
230 5.15.9, 5.16.0, 5.16.1, 5.16.2, 5.16.3, 5.17.0, 5.17.1, 5.17.2, 5.17.3,
231 5.17.4, 5.17.5, 5.17.6, 5.17.7, 5.17.8, 5.17.9, 5.17.10, 5.17.11, 5.18.0,
232 5.19.0, 5.19.1, 5.19.2, 5.19.3, 5.19.4, 5.19.5, 5.19.6, 5.19.7, 5.19.8,
233 5.19.9, 5.19.10, 5.19.11, 5.20.0, 5.21.0, 5.21.1, 5.21.2, 5.21.3, 5.20.1
234 and 5.21.4 releases of perl.
235
236 =head1 HISTORY
237
238 Moved to Changes file.
239
240 =head1 AUTHOR
241
242 Richard Clamp E<lt>richardc@unixbeard.netE<gt>
243
244 Currently maintained by the perl 5 porters E<lt>perl5-porters@perl.orgE<gt>.
245
246 =head1 LICENSE
247
248 Copyright (C) 2002-2009 Richard Clamp.  All Rights Reserved.
249
250 This module is free software; you can redistribute it and/or modify it
251 under the same terms as Perl itself.
252
253 =head1 SEE ALSO
254
255 L<corelist>, L<Module::Info>, L<perl>, L<http://perlpunks.de/corelist>
256
257 =cut