Skip Menu |

This queue is for tickets about the CPANPLUS CPAN distribution.

Report information
The Basics
Id: 23995
Status: resolved
Priority: 0/
Queue: CPANPLUS

People
Owner: Nobody in particular
Requestors: jleffler [...] earthlink.net
Cc:
AdminCc:

Bug Information
Severity: (no value)
Broken in: (no value)
Fixed in: (no value)



Subject: CPANPLUS 0.076 does not recognize all module versions
Date: Mon, 18 Dec 2006 22:58:54 -0800
To: bug-CPANPLUS [...] rt.cpan.org
From: Jonathan Leffler <jleffler [...] earthlink.net>
I'm using CPANPLUS 0.076 with Perl 5.8.8 on MacOS X 10.4.8 (though it was originally compiled on an older 10.4.x version). I'm running into the problem that CPANPLUS seems unable to parse quite a lot of module version numbers. For example: $ cpanp CPANPLUS::Shell::Default -- CPAN exploration and module installation (v0.076) *** Please report bugs to <bug-cpanplus@rt.cpan.org>. *** Using CPANPLUS::Backend v0.076. ReadLine support enabled. CPAN Show quoted text
Terminal> o
[MSG] Checking if source files are up to date [MSG] Retrieving /Users/jleffler/.cpanplus/sourcefiles.2.15.stored Backslash found where operator expected at (eval 1408) line 1, near ")\" (Missing operator before \?) 1 3.00 3.000008 CIPP JRED 2 Unparsable 3.000016 Class::DBI TMTM 3 Unparsable 2.03 Class::Loader VIPUL 4 Unparsable 0.000008 Class::Std DCONWAY 5 Unparsable 0.000002 Class::Std::Utils DCONWAY 6 Unparsable 1.23 ConfigReader::Simple BDFOY 7 0.21 0.28 DBIx::DataModel DAMI 8 3.00 3.001 EasyDBAccess FOOLFISH 9 0.176 0.179 Email::Valid RJBS 10 Unparsable 1.16 GD::Graph::area BWARFIELD 11 Unparsable 1.44 GD::Graph::axestype MVERB 12 Unparsable 1.10 GD::Graph::colour BWARFIELD 13 Unparsable 1.20 GD::Graph::pie BWARFIELD 14 Unparsable 1.18 GD::Text::Align MVERB 15 Unparsable 0.000001 Getopt::Clade DCONWAY 16 Unparsable 0.001 Getopt::Euclid DCONWAY 17 0.79 0.80 IPC::Run RSOD 18 1.18 1.19 List::Util GBARR 19 1.35 1.36 Math::Complex JHI 20 0.62 0.63 Module::CPANTS::ProcessCPAN DOMM 21 Unparsable 0.000003 Module::Starter::PBP DCONWAY 22 Unparsable 0.02 Module::Versions THW 23 Unparsable 2.00 PDF::API2 AREIBENS 24 0.21 0.22 Perl::Critic THALJEF 25 Unparsable 20060719.00 Perl::Tidy SHANCOCK 26 Unparsable 2.12 Regexp::Common ABIGAIL 27 Unparsable 1.00 Set::Crontab AMS 28 Unparsable 1.000002 Smart::Comments DCONWAY 29 Unparsable 0.000003 Sub::Installer DCONWAY 30 1.00 1.000005 Switch::Perlish BROQ 31 2.102 2.86 Template::Stash ABW 32 1.0208 1.0302 Term::ReadLine::Perl ILYAZ 33 0.01 0.97 Text::NSP::Measures TPEDERSE 34 Unparsable 1.001 Variable::Strongly::Typed METZZO 35 Unparsable 0.60 XMLRPC::Lite BYRNE CPAN Show quoted text
Terminal> q
Exiting CPANPLUS shell $ There seem to be several parts to the issue. Some use the qv('0.9.8') notation; others have very complex operations all on one line. The attached version.info file contains the various VERSION lines in the 'Unparsable' files above - I hope that saves you from having to collect the odd-ball set of modules. If you need any more assistance - don't hesitate to ask. (Separately: I've found that a number of modules have managed to end up with at least 2 Module.pm files underneath my Perl installation in different directories. By cleaning up the duplicates manually, I've been able to fix the 'non-updating' versions. For instance, List::Util has files: $ find lib -name Util.pm | grep List/Util lib/5.8.8/List/Util.pm lib/site_perl/5.8.8/darwin-2level/List/Util.pm $ $ grep VERSION $(find lib -name Util.pm | grep List/Util) lib/5.8.8/List/Util.pm:use vars qw(@ISA @EXPORT_OK $VERSION $XS_VERSION $TESTING_PERL_ONLY); lib/5.8.8/List/Util.pm:$VERSION = "1.18"; lib/5.8.8/List/Util.pm:$XS_VERSION = $VERSION; lib/5.8.8/List/Util.pm:$VERSION = eval $VERSION; lib/5.8.8/List/Util.pm: XSLoader::load('List::Util', $XS_VERSION); lib/5.8.8/List/Util.pm: bootstrap List::Util $XS_VERSION; lib/site_perl/5.8.8/darwin-2level/List/Util.pm:use vars qw(@ISA @EXPORT_OK $VERSION $XS_VERSION $TESTING_PERL_ONLY); lib/site_perl/5.8.8/darwin-2level/List/Util.pm:$VERSION = "1.19"; lib/site_perl/5.8.8/darwin-2level/List/Util.pm:$XS_VERSION = $VERSION; lib/site_perl/5.8.8/darwin-2level/List/Util.pm:$VERSION = eval $VERSION; lib/site_perl/5.8.8/darwin-2level/List/Util.pm: XSLoader::load('List::Util', $XS_VERSION); lib/site_perl/5.8.8/darwin-2level/List/Util.pm: bootstrap List::Util $XS_VERSION; $ By removing the 1.18 files, the 1.19 version will become visible. I've been using CPANPLUS all along. Does it have an option to remove conflicting modules--like I seem to remember CPAN having? My configuration is: CPAN Terminal> s conf allow_build_interactivity '1' base '/Users/jleffler/.cpanplus' buildflags '' cpantest '' cpantest_mx '' debug '' dist_type '' email 'cpanplus@example.com' extractdir '' fetchdir '' flush '1' force '' lib [] makeflags '' makemakerflags '' md5 '1' no_update '' passive '1' prefer_bin '' prefer_makefile '1' prereqs '1' shell 'CPANPLUS::Shell::Default' signature '1' skiptest '' storable '1' timeout '300' verbose '1' write_install_logs '1' CPAN Terminal> Removing lib/5.8.8/List/Util.pm means the List::Util is now shown to be up to date. -- Jonathan Leffler (jleffler@earthlink.net) #include <disclaimer.h> Guardian of DBD::Informix v2005.02 -- http://dbi.perl.org/
lib/site_perl/5.8.8/Class/DBI.pm:10:use version; $VERSION = qv('3.0.14'); lib/site_perl/5.8.8/Class/Loader.pm:13:use vars qw($VERSION); lib/site_perl/5.8.8/Class/Loader.pm:15:($VERSION) = '$Revision: 2.03 $' =~ /\s(\d+\.\d+)\s/; lib/site_perl/5.8.8/Class/Loader.pm:99:=head1 VERSION lib/site_perl/5.8.8/Class/Std.pm:3:use version; $VERSION = qv('0.0.8'); lib/site_perl/5.8.8/Class/Std.pm:620:=head1 VERSION lib/site_perl/5.8.8/Class/Std/Utils.pm:3:use version; $VERSION = qv('0.0.2'); lib/site_perl/5.8.8/Class/Std/Utils.pm:46:=head1 VERSION lib/site_perl/5.8.8/ConfigReader/Simple.pm:6:use vars qw($VERSION $AUTOLOAD %ERROR $ERROR $Warn $Die); lib/site_perl/5.8.8/ConfigReader/Simple.pm:13:( $VERSION ) = sprintf "%d.%02d", q$Revision: 1.23 $ =~ m/ (\d+) \. (\d+) /gx; lib/site_perl/5.8.8/GD/Graph/area.pm:14:($GD::Graph::area::VERSION) = '$Revision: 1.16.2.3 $' =~ /\s([\d.]+)/; lib/site_perl/5.8.8/GD/Graph/axestype.pm:14:($GD::Graph::axestype::VERSION) = '$Revision: 1.44.2.14 $' =~ /\s([\d.]+)/; lib/site_perl/5.8.8/GD/Graph/colour.pm:19:($GD::Graph::colour::VERSION) = '$Revision: 1.10 $' =~ /\s([\d.]+)/; lib/site_perl/5.8.8/GD/Graph/colour.pm:301:sub version { $GD::Graph::colour::VERSION } lib/site_perl/5.8.8/GD/Graph/pie.pm:14:($GD::Graph::pie::VERSION) = '$Revision: 1.20.2.4 $' =~ /\s([\d.]+)/; lib/site_perl/5.8.8/GD/Text/Align.pm:5:($GD::Text::Align::VERSION) = '$Revision: 1.18 $' =~ /\s([\d.]+)/; lib/site_perl/5.8.8/Getopt/Clade.pm:4:$VERSION = qv('0.0.1'); lib/site_perl/5.8.8/Getopt/Euclid.pm:3:use version; $VERSION = qv('0.1.0'); lib/site_perl/5.8.8/Getopt/Euclid.pm:90: my $VERS = qr{ $HWS VERSION $HWS \n }xms; lib/site_perl/5.8.8/Getopt/Euclid.pm:804:=head1 VERSION lib/site_perl/5.8.8/Getopt/Euclid.pm:829: =head1 VERSION lib/site_perl/5.8.8/Getopt/Euclid.pm:1014:=item =head1 VERSION lib/site_perl/5.8.8/Getopt/Euclid.pm:1022: =head1 VERSION lib/site_perl/5.8.8/Getopt/Euclid.pm:1028: =head1 VERSION lib/site_perl/5.8.8/Getopt/Euclid.pm:1588:program (as specified in the C<=head1 VERSION> section of the POD) and lib/site_perl/5.8.8/Module/Starter/PBP.pm:4:use version; $VERSION = qv('0.0.3'); lib/site_perl/5.8.8/Module/Starter/PBP.pm:96:diag( "Testing $main_module \$${main_module}::VERSION" ); lib/site_perl/5.8.8/Module/Starter/PBP.pm:282:=head1 VERSION lib/site_perl/5.8.8/Module/Starter/PBP.pm:611:use version; $VERSION = qv('0.0.3'); lib/site_perl/5.8.8/Module/Starter/PBP.pm:631:!=head1 VERSION lib/site_perl/5.8.8/Module/Versions.pm:20:our ( $VERSION, $v, $_VERSION ); lib/site_perl/5.8.8/Module/Versions.pm:22:# -- CPAN VERSION (='major.minor{2}') lib/site_perl/5.8.8/Module/Versions.pm:26:$VERSION = do { my @r = ( ( $v = q<Version value="0.20.1"> ) =~ /\d+/g ); sprintf "%d.%02d", $r[0], int( $r[1] / 10 ) }; lib/site_perl/5.8.8/Module/Versions.pm:28:# -- Mumified VERSION (='major.minor{3}release{3}revision{3}') lib/site_perl/5.8.8/Module/Versions.pm:253: # *) Attention: a new object contains implicitly the $VERSION from loaded lib/site_perl/5.8.8/Module/Versions.pm:302: my $seen = { q{::} => { 'VERSION' => 1 } }; # avoid multiple scans lib/site_perl/5.8.8/Module/Versions.pm:303: # of VERSION (object and lib/site_perl/5.8.8/Module/Versions.pm:313: # -- Mandantory scan of VERSION - as an object! lib/site_perl/5.8.8/Module/Versions.pm:314: [ ( eval "$module->VERSION" # try to find VERSION lib/site_perl/5.8.8/Module/Versions.pm:315: ? ( $module, 'VERSION', lib/site_perl/5.8.8/Module/Versions.pm:316: eval "$module->VERSION" lib/site_perl/5.8.8/Module/Versions.pm:317: ? eval "$module->VERSION" lib/site_perl/5.8.8/Module/Versions.pm:320: : ( $module, qw{VERSION unknown} ) # FATAL! Ref: Camel ... lib/site_perl/5.8.8/Module/Versions.pm:369: # -- Try to use 'version' for overloading VERSION formatting lib/site_perl/5.8.8/Module/Versions.pm:457:<!-- \$Id XSD schema created by $package $VERSION at $localtime \$ --> lib/site_perl/5.8.8/Module/Versions.pm:471: <xs:pattern value="VERSION"/> lib/site_perl/5.8.8/Module/Versions.pm:500:<!-- \$Id DTD created by $package $VERSION at $localtime \$ --> lib/site_perl/5.8.8/Module/Versions.pm:519:=head1 VERSION lib/site_perl/5.8.8/Module/Versions.pm:605:Module::Versions tries to read the loaded/loadable module's $VERSION. For lib/site_perl/5.8.8/Module/Versions.pm:619:Module::Versions tries to load 'version.pm' to support Perl 5.10.0's $VERSION lib/site_perl/5.8.8/Module/Versions.pm:695:be scanned in addition to $VERSION. The module list contains explicitely defined lib/site_perl/5.8.8/Module/Versions.pm:706:String or ARRAY of strings; default is 'VERSION'. lib/site_perl/5.8.8/Module/Versions.pm:709:observed in addition to the Perl standard variable '$VERSION', e.g. '$_VERSION', lib/site_perl/5.8.8/Module/Versions.pm:710:'$version', '$REV'. See '$_VERSION' in this source (='Mumified VERSION')>. lib/site_perl/5.8.8/Module/Versions.pm:712:The selection of the Perl standard variable '$VERSION' is mandantory and cannot lib/site_perl/5.8.8/Module/Versions.pm:753:well as the Camel rules for the $VERSION (e.q. B<0.01>). This 'untouched' lib/site_perl/5.8.8/Module/Versions.pm:807: 1 [ AutoLoader VERSION v5.600.0 ] lib/site_perl/5.8.8/Module/Versions.pm:808: 2 [ Carp VERSION v1.30.0 ] lib/site_perl/5.8.8/Module/Versions.pm:809: 3 *[ Config VERSION unknown ] lib/site_perl/5.8.8/Module/Versions.pm:810: 4 [ Cwd VERSION v3.10.0 ] lib/site_perl/5.8.8/Module/Versions.pm:822: 4. variable [string] VERSION Module lib/site_perl/5.8.8/Module/Versions.pm:829: 2. variable [string] VERSION Module lib/site_perl/5.8.8/Module/Versions.pm:846: $versions = [['AutoLoader','VERSION','5.600'],...]; lib/site_perl/5.8.8/Module/Versions.pm:852: $versions = {'AutoLoader' => {'VERSION' => '5.600'},...}; lib/site_perl/5.8.8/Module/Versions.pm:858: Carp,VERSION,1.030 # Module, Name, Value lib/site_perl/5.8.8/Module/Versions.pm:859: strict,VERSION,1.030 lib/site_perl/5.8.8/Module/Versions.pm:861: Data::Dumper,VERSION,2.121_020 lib/site_perl/5.8.8/Module/Versions.pm:862: Win32::PerlExe::Env,VERSION,0.050 # Standard variable $VERSION lib/site_perl/5.8.8/Module/Versions.pm:870: Carp,VERSION,1.030 # Data lib/site_perl/5.8.8/Module/Versions.pm:871: strict,VERSION,1.030 # : lib/site_perl/5.8.8/Module/Versions.pm:873: Data::Dumper,VERSION,2.121_020 # lib/site_perl/5.8.8/Module/Versions.pm:874: Win32::PerlExe::Env,VERSION,0.050 # lib/site_perl/5.8.8/Module/Versions.pm:885: <version module="Carp" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:886: <version module="strict" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:888: <version module="Data::Dumper" name="VERSION">2.121_020</version> lib/site_perl/5.8.8/Module/Versions.pm:889: <version module="Win32::PerlExe::Env" name="VERSION">0.050</version> lib/site_perl/5.8.8/Module/Versions.pm:898: <version module="Carp" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:899: <version module="strict" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:908: <version module="Carp" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:909: <version module="strict" name="VERSION">1.030</version> lib/site_perl/5.8.8/Module/Versions.pm:949: 'VERSION', # Variable lib/site_perl/5.8.8/Module/Versions.pm:957: 'VERSION', lib/site_perl/5.8.8/Module/Versions.pm:968: 'VERSION' => '1.030' # Variable and Value lib/site_perl/5.8.8/Module/Versions.pm:971: 'VERSION' => '2.121_020' lib/site_perl/5.8.8/Module/Versions.pm:977: 'VERSION' => '0.050', # Standard variable $VERSION lib/site_perl/5.8.8/PDF/API2.pm:38: use vars qw( $VERSION $seq @FontDirs ); lib/site_perl/5.8.8/PDF/API2.pm:40: ($VERSION) = sprintf '%i.%03i', split(/\./,('$Revision: 2.0 $' =~ /Revision: (\S+)\s/)[0]); # $Date: 2005/11/16 02:16:00 $ lib/site_perl/5.8.8/Perl/Tidy.pm:53: $VERSION lib/site_perl/5.8.8/Perl/Tidy.pm:66: ( $VERSION = q($Id: Tidy.pm,v 1.56 2006/07/19 23:13:33 perltidy Exp $) ) =~ s/^.*\s+(\d+)\/(\d+)\/(\d+).*$/$1$2$3/; # all one line for MakeMaker lib/site_perl/5.8.8/Perl/Tidy.pm:1049:"perltidy version $VERSION log file on a $^O system, OLD_PERL_VERSION=$]\n" lib/site_perl/5.8.8/Perl/Tidy.pm:2767:This is perltidy, v$VERSION lib/site_perl/5.8.8/Perl/Tidy.pm:2782:This is perltidy version $VERSION, a perl script indenter. Usage: lib/site_perl/5.8.8/Perl/Tidy.pm:8460: # in which $VERSION may be calculated. See MakeMaker.pm; lib/site_perl/5.8.8/Perl/Tidy.pm:8465: # *VERSION = \'1.01'; lib/site_perl/5.8.8/Perl/Tidy.pm:8466: # ( $VERSION ) = '$Revision: 1.56 $ ' =~ /\$Revision:\s+([^\s]+)/; lib/site_perl/5.8.8/Perl/Tidy.pm:8474: && $input_line =~ /VERSION/ # quick check to reject most lines lib/site_perl/5.8.8/Perl/Tidy.pm:8480: write_logfile_entry("passing VERSION line; -npvl deactivates\n"); lib/site_perl/5.8.8/Perl/Tidy.pm:9138: # if this is a VERSION statement lib/site_perl/5.8.8/Perl/Tidy.pm:23048: # TODO: it would be much nicer to create a new token V for VERSION lib/site_perl/5.8.8/Perl/Tidy.pm:25126: # if ( VERSION < 5.009 && $op-> name eq 'aassign' ) { } lib/site_perl/5.8.8/Perl/Tidy.pm:26724:=head1 VERSION lib/site_perl/5.8.8/Regexp/Common.pm:8:use vars qw /$VERSION %RE %sub_interface $AUTOLOAD/; lib/site_perl/5.8.8/Regexp/Common.pm:10:($VERSION) = q $Revision: 2.120 $ =~ /([\d.]+)/; lib/site_perl/5.8.8/Regexp/Common.pm:918: VERSION is now extracted from the CVS revision number. lib/site_perl/5.8.8/Set/Crontab.pm:8:use vars qw( $VERSION ); lib/site_perl/5.8.8/Set/Crontab.pm:10:($VERSION) = q$Revision: 1.00 $ =~ /([\d.]+)/; lib/site_perl/5.8.8/Smart/Comments.pm:3:use version; $VERSION = qv('1.0.2'); lib/site_perl/5.8.8/Smart/Comments.pm:444:=head1 VERSION lib/site_perl/5.8.8/Sub/Installer.pm:3:use version; $VERSION = qv('0.0.3'); lib/site_perl/5.8.8/Sub/Installer.pm:68:=head1 VERSION lib/site_perl/5.8.8/Variable/Strongly/Typed.pm:3:use version; $VERSION = qv('1.1.0'); lib/site_perl/5.8.8/Variable/Strongly/Typed.pm:225:=head1 VERSION lib/site_perl/5.8.8/Apache/XMLRPC/Lite.pm:14:use vars qw(@ISA $VERSION); lib/site_perl/5.8.8/Apache/XMLRPC/Lite.pm:18:#$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: $ =~ /-(\d+)_([\d_]+)/); lib/site_perl/5.8.8/Apache/XMLRPC/Lite.pm:19:$VERSION = $XMLRPC::Lite::VERSION; lib/site_perl/5.8.8/XMLRPC/Lite.pm:15:use vars qw($VERSION); lib/site_perl/5.8.8/XMLRPC/Lite.pm:16:#$VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: $ =~ /-(\d+)_([\d_]+)/); lib/site_perl/5.8.8/XMLRPC/Lite.pm:17:$VERSION = $SOAP::Lite::VERSION;
On Tue Dec 19 01:59:41 2006, jleffler@earthlink.net wrote: Show quoted text
> I'm running into > the problem that CPANPLUS seems unable to parse quite a lot of module > version numbers.
[...] Show quoted text
> There seem to be several parts to the issue. Some use the qv('0.9.8') > notation;
Yes, Perl Best Practices has made that quite popular. Unfortunately, the support for this isn't optimal :( I wrote a message about it today on p5p, hoping we can get this standard supported for older perls as well: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2007-01/msg00180.html Show quoted text
> others have very complex operations all on one line.
One obvious case that we're missing to detect is the ($VERSION) = notation, or derivatives thereof... I think EU::MM would also have problems with that, I'd have to check though (we use the same regex after all). Show quoted text
> The attached version.info file contains the various VERSION lines in the > 'Unparsable' files above - I hope that saves you from having to collect > the odd-ball set of modules. > > If you need any more assistance - don't hesitate to ask.
Thanks, much appreciated. Show quoted text
> (Separately: I've found that a number of modules have managed to end up > with at least 2 Module.pm files underneath my Perl installation in > different directories. By cleaning up the duplicates manually, I've > been able to fix the 'non-updating' versions. For instance, List::Util > has files: > > $ find lib -name Util.pm | grep List/Util > lib/5.8.8/List/Util.pm > lib/site_perl/5.8.8/darwin-2level/List/Util.pm > $
That is usually a bug in core modules, unfornutely. They are dual-life modules. The version shipped with core goes into lib, but the author forget to add a directive in the Makefile.PL telling EU::MM to install it in the core dir from the version it got bundled. List::Util is a case in point: $ corelist List::Util List::Util was first released with perl 5.007003 But it's Makefile.PL doesn't inform EU::MM to put it in the core dir upon installing: http://search.cpan.org/src/GBARR/Scalar-List-Utils-1.19/Makefile.PL I'd report this as a bug to the author. Thanks again for the report. I'll be going on a 2 week holiday soon, so the fix might have to wait until after that. -- Jos
Hi, I've just uploaded Module::Load::Conditional 0.16, which CPANPLUS uses to parse versions, which should address most of the issues. Show quoted text
> > There seem to be several parts to the issue. Some use the > > qv('0.9.8') notation;
M::L::C now relies on version.pm 0.69 or higher to deal with qv() notations. John Peacock made sure that 0.69 can truely build in a pure perl way, thus increasing portability. Show quoted text
> One obvious case that we're missing to detect is the ($VERSION) = > notation, or derivatives thereof... I think EU::MM would also have > problems with that, I'd have > to check though (we use the same regex after all).
EU::MM uses a string eval to get around this. I've taken the liberty to copy this bit of code to make M::L::C's parsing and evaluating at least as good as that of EU::MM. Show quoted text
> > The attached version.info file contains the various VERSION lines in > > the 'Unparsable' files above - I hope that saves you from having to > > collect the odd-ball set of modules.
Thanks again for this list -- it's been included in 02_Parse_Version.t as input for the version parsing tests. Of course, they now all pass :) You can get 0.16 from CPAN soon, or from PAUSE now: https://pause.perl.org/pub/PAUSE/authors/id/K/KA/KANE/Module-Load- Conditional-0.16.tar.gz Thanks again for reporting, -- Jos