Subject: | corelist utility enhancements |
Two things were usually bothering me when dealing with the "corelist" tool:
- the need to use "proper" PerlVersions (e.g. 5.008008) instead of "user
friendly" ones (e.g. 5.8.8);
- no easy way to determine what was some module's version bundled with a
specified Perl release.
So here comes this patch that tweaks exactly these two issues. E.g.:
$ ./corelist -v 5.8.6 B
B 1.07
I also twisted the documentation a little bit, hopefully clarifying the
difference (in Synopsis) between "Module Version" and "Perl Version".
Please note that the "user friendly version" hack adds a dependency on
version.pm.
Subject: | corelist-2.05.patch |
--- corelist.orig 2006-06-06 19:16:23.000000000 +0300
+++ corelist 2006-07-17 01:12:29.000000000 +0300
@@ -10,8 +10,9 @@
=head1 SYNOPSIS
- corelist [-a] [ Modulename [ version ]] [ /Modulenameregex/ [ version ] ] ...
- corelist [-v [ version ]]
+ corelist -v [<PerlVersion>]
+ corelist [-a] <ModuleName> | /<ModuleRegex>/ [<ModuleVersion>] ...
+ corelist [-v <PerlVersion>] [ <ModuleName> | /<ModuleNameRegex>/ ] ...
=head1 OPTIONS
@@ -55,6 +56,8 @@
If you pass a version argument (value of C<$]>, like 5.00503),
you get a list of all the modules and their respective versions.
+In module filtering context, it can be used as Perl version filter.
+
=back
=cut
@@ -64,6 +67,7 @@
use Pod::Usage;
use strict;
use warnings;
+use version ();
my %Opts;
@@ -73,21 +77,32 @@
pod2usage(-verbose=>2) if $Opts{man};
if(exists $Opts{v} ){
- if( $Opts{v} ) {
- if( exists $Module::CoreList::version{$Opts{v}} ) {
+ if( !$Opts{v} ) {
+ print "\nModule::CoreList has info on the following perl versions:\n";
+ print "$_\n" for sort keys %Module::CoreList::version;
+ print "\n";
+ exit 0;
+ }
+
+ $Opts{v} = numify_version( $Opts{v} );
+ if( !exists $Module::CoreList::version{$Opts{v}} ) {
+ print "\nModule::CoreList has no info on perl v$Opts{v}\n\n";
+ exit 1;
+ }
+
+ if ( !@ARGV ) {
print "\nThe following modules were in perl v$Opts{v} CORE\n";
print "$_ ", $Module::CoreList::version{$Opts{v}}{$_} || " ","\n"
for sort keys %{$Module::CoreList::version{$Opts{v}}};
print "\n";
- } else {
- print "\nModule::CoreList has no info on perl v$Opts{v}\n\n";
+ exit 0;
}
- } else {
- print "\nModule::CoreList has info on the following perl versions:\n";
- print "$_\n" for sort keys %Module::CoreList::version;
- print "\n";
}
-} elsif (@ARGV) {
+
+if ( !@ARGV ) {
+ pod2usage(0);
+}
+
while (@ARGV) {
my ($mod, $ver);
if ($ARGV[0] =~ /=/) {
@@ -118,10 +133,6 @@
}
}
-
- }
-} else {
- pod2usage(0);
}
exit();
@@ -129,6 +140,12 @@
sub module_version {
my($mod,$ver) = @_;
+ if ( $Opts{v} ) {
+ return printf " %-24s %-10s\n",
+ $mod,
+ $Module::CoreList::version{$Opts{v}}{$mod} || 'undef';
+ }
+
$ver = "" unless defined $ver;
my $ret = Module::CoreList->first_release(@_);
@@ -158,6 +175,13 @@
}
}
+sub numify_version {
+ my $ver = shift;
+ if ( index( $ver, q{.}, index( $ver, q{.} ) ) >= 0 ) {
+ $ver = version->new($ver)->numify;
+ }
+ return $ver;
+}
=head1 EXAMPLES
@@ -191,6 +215,29 @@
/Template/ has no match in CORE (or so I think)
+ $ corelist -v 5.8.8 B
+
+ B 1.09_01
+
+ $ corelist -v 5.8.8 /^B::/
+
+ B::Asmdata 1.01
+ B::Assembler 0.07
+ B::Bblock 1.02_01
+ B::Bytecode 1.01_01
+ B::C 1.04_01
+ B::CC 1.00_01
+ B::Concise 0.66
+ B::Debug 1.02_01
+ B::Deparse 0.71
+ B::Disassembler 1.05
+ B::Lint 1.03
+ B::O 1.00
+ B::Showlex 1.02
+ B::Stackobj 1.00
+ B::Stash 1.00
+ B::Terse 1.03_01
+ B::Xref 1.01
=head1 COPYRIGHT