This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Module::CoreList 2.05
[perl5.git] / lib / Module / CoreList / bin / corelist
1 #!/usr/bin/perl
2
3 =head1 NAME
4
5 corelist - a commandline frontend to Module::CoreList
6
7 =head1 DESCRIPTION
8
9 See L<Module::CoreList> for one.
10
11 =head1 SYNOPSIS
12
13     corelist [-a] [ Modulename [ version ]] [ /Modulenameregex/ [ version ] ] ...
14     corelist [-v [ version ]]
15
16 =head1 OPTIONS
17
18 =over
19
20 =item -a modulename
21
22     corelist -a utf8
23
24     utf8  was first released with perl 5.006
25       5.006      undef
26       5.006001   undef
27       5.006002   undef
28       5.007003   1.00
29       5.008      1.00
30       5.008001   1.02
31       5.008002   1.02
32       5.008003   1.02
33       5.008004   1.03
34       5.008005   1.04
35       5.008006   1.04
36       5.008007   1.05
37       5.008008   1.06
38       5.009      1.02
39       5.009001   1.02
40       5.009002   1.04
41       5.009003   1.06
42
43 =item -? or -help
44
45 help! help! help! to see more help, try --man.
46
47 =item -man
48
49 all of the help
50
51 =item -v
52
53 lists all of the perl release versions we got the CoreList for.
54
55 If you pass a version argument (value of C<$]>, like 5.00503),
56 you get a list of all the modules and their respective versions.
57
58 =back
59
60 =cut
61
62 use Module::CoreList;
63 use Getopt::Long;
64 use Pod::Usage;
65 use strict;
66 use warnings;
67
68 my %Opts;
69
70 GetOptions(\%Opts, qw[ help|?! man! v|version:f a! ] );
71
72 pod2usage(1) if $Opts{help};
73 pod2usage(-verbose=>2) if $Opts{man};
74
75 if(exists $Opts{v} ){
76     if( $Opts{v} ) {
77         if( exists $Module::CoreList::version{$Opts{v}} ) {
78             print "\nThe following modules were in perl v$Opts{v} CORE\n";
79             print "$_ ", $Module::CoreList::version{$Opts{v}}{$_} || " ","\n"
80                 for sort keys %{$Module::CoreList::version{$Opts{v}}};
81             print "\n";
82         } else {
83             print "\nModule::CoreList has no info on perl v$Opts{v}\n\n";
84         }
85     } else {
86         print "\nModule::CoreList has info on the following perl versions:\n";
87         print "$_\n" for sort keys %Module::CoreList::version;
88         print "\n";
89     }
90 } elsif (@ARGV) {
91     while (@ARGV) {
92         my ($mod, $ver);
93         if ($ARGV[0] =~ /=/) {
94             ($mod, $ver) = split /=/, shift @ARGV;
95         } else {
96             $mod = shift @ARGV;
97             $ver = (@ARGV && $ARGV[0] =~ /^\d/) ? shift @ARGV : "";
98         }
99
100         if ($mod !~ m|^/(.*)/([imosx]*)$|) { # not a regex
101             module_version($mod,$ver);
102         } else {
103             my $re;
104             eval { $re = $2 ? qr/(?$2)($1)/ : qr/$1/; }; # trap exceptions while building regex
105             if ($@) {
106                 # regex errors are usually like 'Quantifier follow nothing in regex; marked by ...'
107                 # then we drop text after ';' to shorten message
108                 my $errmsg = $@ =~ /(.*);/ ? $1 : $@;
109                 warn "\n$mod  is a bad regex: $errmsg\n";
110                 next;
111             }
112             my @mod = Module::CoreList->find_modules($re);
113             if (@mod) {
114                 module_version($_, $ver) for @mod;
115             } else {
116                 $ver |= '';
117                 print "\n$mod $ver has no match in CORE (or so I think)\n";
118             }
119
120         }
121
122     }
123 } else {
124     pod2usage(0);
125 }
126
127 exit();
128
129 sub module_version {
130     my($mod,$ver) = @_;
131
132     $ver = "" unless defined $ver;
133
134     my $ret = Module::CoreList->first_release(@_);
135     my $msg = "$mod $ver";
136
137     if( defined $ret ) {
138         $msg .= " was ";
139         $msg .= "first " unless $ver;
140         $msg .= "released with perl $ret"
141     } else {
142         $msg .= " was not in CORE (or so I think)";
143     }
144
145     print "\n",$msg,"\n";
146
147     if(defined $ret and exists $Opts{a} and $Opts{a}){
148         for my $v(
149             sort keys %Module::CoreList::version ){
150
151             printf "  %-10s %-10s\n",
152                 $v,
153                 $Module::CoreList::version{$v}{$mod}
154                     || 'undef'
155                     if exists $Module::CoreList::version{$v}{$mod};
156         }
157         print "\n";
158     }
159 }
160
161
162 =head1 EXAMPLES
163
164     $ corelist File::Spec
165
166     File::Spec  was first released with perl 5.005
167
168     $ corelist File::Spec 0.83
169
170     File::Spec 0.83 was released with perl 5.007003
171
172     $ corelist File::Spec 0.89
173
174     File::Spec 0.89 was not in CORE (or so I think)
175
176     $ corelist File::Spec::Aliens
177
178     File::Spec::Aliens  was not in CORE (or so I think)
179
180     $ corelist /IPC::Open/
181
182     IPC::Open2  was first released with perl 5
183
184     IPC::Open3  was first released with perl 5
185
186     $ corelist /MANIFEST/i
187
188     ExtUtils::Manifest  was first released with perl 5.001
189
190     $ corelist /Template/
191
192     /Template/  has no match in CORE (or so I think)
193
194
195 =head1 COPYRIGHT
196
197 Copyright (c) 2002-2006 by D.H. aka PodMaster
198
199 Current maintainer : Rafael Garcia-Suarez E<lt>rgarciasuarez at mandriva dot
200 comE<gt>
201
202 This program is distributed under the same terms as perl itself.
203 See http://perl.org/ or http://cpan.org/ for more info on that.
204
205 =cut