5 corelist - a commandline frontend to Module::CoreList
9 See L<Module::CoreList> for one.
14 corelist [-a|-d] <ModuleName> | /<ModuleRegex>/ [<ModuleVersion>] ...
15 corelist [-v <PerlVersion>] [ <ModuleName> | /<ModuleRegex>/ ] ...
16 corelist [-r <PerlVersion>] ...
17 corelist --diff PerlVersion PerlVersion
25 lists all versions of the given module (or the matching modules, in case you
26 used a module regexp) in the perls Module::CoreList knows about.
30 Unicode was first released with perl v5.6.2
79 finds the first perl version where a module has been released by
80 date, and not by version number (as is the default).
84 Given two versions of perl, this prints a human-readable table of all module
85 changes between the two. The output format may change in the future, and is
86 meant for I<humans>, not programs. For programs, use the L<Module::CoreList>
91 help! help! help! to see more help, try --man.
99 lists all of the perl release versions we got the CoreList for.
101 If you pass a version argument (value of C<$]>, like C<5.00503> or C<5.008008>),
102 you get a list of all the modules and their respective versions.
103 (If you have the C<version> module, you can also use new-style version numbers,
106 In module filtering context, it can be used as Perl version filter.
110 lists all of the perl releases and when they were released
112 If you pass a perl version you get the release date for that version only.
116 As a special case, if you specify the module name C<Unicode>, you'll get
117 the version number of the Unicode Character Database bundled with the
118 requested perl versions.
122 use Module::CoreList;
132 qw[ help|?! man! r|release:s v|version:s a! d diff|D ]
135 pod2usage(1) if $Opts{help};
136 pod2usage(-verbose=>2) if $Opts{man};
138 if(exists $Opts{r} ){
140 print "\nModule::CoreList has release info for the following perl versions:\n";
142 my $max_ver_len = max_mod_len(\%Module::CoreList::released);
143 for my $ver ( sort keys %Module::CoreList::released ) {
144 printf "%-${max_ver_len}s %s\n", format_perl_version($ver), $Module::CoreList::released{$ver};
150 my $num_r = numify_version( $Opts{r} );
151 my $version_hash = Module::CoreList->find_version($num_r);
153 if( !$version_hash ) {
154 print "\nModule::CoreList has no info on perl $Opts{r}\n\n";
158 printf "Perl %s was released on %s\n\n", format_perl_version($num_r), $Module::CoreList::released{$num_r};
162 if(exists $Opts{v} ){
164 print "\nModule::CoreList has info on the following perl versions:\n";
165 print format_perl_version($_)."\n" for sort keys %Module::CoreList::version;
170 my $num_v = numify_version( $Opts{v} );
171 my $version_hash = Module::CoreList->find_version($num_v);
173 if( !$version_hash ) {
174 print "\nModule::CoreList has no info on perl $Opts{v}\n\n";
179 print "\nThe following modules were in perl $Opts{v} CORE\n";
180 my $max_mod_len = max_mod_len($version_hash);
181 for my $mod ( sort keys %$version_hash ) {
182 printf "%-${max_mod_len}s %s\n", $mod, $version_hash->{$mod} || "";
191 die "\nprovide exactly two perl core versions to diff with --diff\n";
194 my ($old_ver, $new_ver) = @ARGV;
196 my $old = numify_version($old_ver);
197 my $new = numify_version($new_ver);
199 my %diff = Module::CoreList::changes_between($old, $new);
201 for my $lib (sort keys %diff) {
202 my $diff = $diff{$lib};
204 my $was = ! exists $diff->{left} ? '(absent)'
205 : ! defined $diff->{left} ? '(undef)'
208 my $now = ! exists $diff->{right} ? '(absent)'
209 : ! defined $diff->{right} ? '(undef)'
212 printf "%-35s %10s %10s\n", $lib, $was, $now;
223 if ($ARGV[0] =~ /=/) {
224 ($mod, $ver) = split /=/, shift @ARGV;
227 $ver = (@ARGV && $ARGV[0] =~ /^\d/) ? shift @ARGV : "";
230 if ($mod !~ m|^/(.*)/([imosx]*)$|) { # not a regex
231 module_version($mod,$ver);
234 eval { $re = $2 ? qr/(?$2)($1)/ : qr/$1/; }; # trap exceptions while building regex
236 # regex errors are usually like 'Quantifier follow nothing in regex; marked by ...'
237 # then we drop text after ';' to shorten message
238 my $errmsg = $@ =~ /(.*);/ ? $1 : $@;
239 warn "\n$mod is a bad regex: $errmsg\n";
242 my @mod = Module::CoreList->find_modules($re);
244 module_version($_, $ver) for @mod;
247 print "\n$mod $ver has no match in CORE (or so I think)\n";
259 my $numeric_v = numify_version($Opts{v});
260 my $version_hash = Module::CoreList->find_version($numeric_v);
262 print $mod, " ", $version_hash->{$mod} || 'undef', "\n";
265 else { die "Shouldn't happen" }
269 ? Module::CoreList->first_release_by_date(@_)
270 : Module::CoreList->first_release(@_);
272 $msg .= " $ver" if $ver;
275 ? Module::CoreList->removed_from_by_date($mod)
276 : Module::CoreList->removed_from($mod);
280 $msg .= "first " unless $ver;
281 $msg .= "released with perl " . format_perl_version($ret);
282 $msg .= " and removed from " . format_perl_version($rem) if $rem;
284 $msg .= " was not in CORE (or so I think)";
287 print "\n",$msg,"\n";
289 if(defined $ret and exists $Opts{a} and $Opts{a}){
296 my $versions = shift;
298 for my $mod (keys %$versions) {
299 $max = max($max, length $mod);
306 my($this, $that) = @_;
307 return $this if $this > $that;
314 for my $v (grep !/000$/, sort keys %Module::CoreList::version ) {
315 next unless exists $Module::CoreList::version{$v}{$mod};
317 my $mod_v = $Module::CoreList::version{$v}{$mod} || 'undef';
318 printf " %-10s %-10s\n", format_perl_version($v), $mod_v;
326 sub have_version_pm {
327 return $have_version_pm if defined $have_version_pm;
328 return $have_version_pm = eval { require version; 1 };
333 sub format_perl_version {
335 return $v if $v < 5.006 or !have_version_pm;
336 return version->new($v)->normal;
342 if ($ver =~ /\..+\./) {
344 or die "You need to install version.pm to use dotted version numbers\n";
345 $ver = version->new($ver)->numify;
353 $ corelist File::Spec
355 File::Spec was first released with perl 5.005
357 $ corelist File::Spec 0.83
359 File::Spec 0.83 was released with perl 5.007003
361 $ corelist File::Spec 0.89
363 File::Spec 0.89 was not in CORE (or so I think)
365 $ corelist File::Spec::Aliens
367 File::Spec::Aliens was not in CORE (or so I think)
369 $ corelist /IPC::Open/
371 IPC::Open2 was first released with perl 5
373 IPC::Open3 was first released with perl 5
375 $ corelist /MANIFEST/i
377 ExtUtils::Manifest was first released with perl 5.001
379 $ corelist /Template/
381 /Template/ has no match in CORE (or so I think)
383 $ corelist -v 5.8.8 B
387 $ corelist -v 5.8.8 /^B::/
409 Copyright (c) 2002-2007 by D.H. aka PodMaster
411 Currently maintained by the perl 5 porters E<lt>perl5-porters@perl.orgE<gt>.
413 This program is distributed under the same terms as perl itself.
414 See http://perl.org/ or http://cpan.org/ for more info on that.