A bug in MakeMaker's parse_version() was found recently.  Module::Build has
the same bug.
https://rt.cpan.org/Ticket/Display.html?id=30747

It's reproducible by getting the version from a module like this:

$VERSION = 1.23;  sub version { $VERSION }

and then this:

use version;  $VERSION = version->new(2.34);

The version() routine pollutes the namespace in which the $VERSION code is
evaled.  It thinks version->new() is version()->new() calling the polluting
version() routine.  MakeMaker fixed it by deleting any version() routines from
the symbol table before trying to eval the $VERSION code.

Here's code to reproduce:

$ cat Version_Sub.pm
package Version_Sub;

$VERSION = 1.23;  sub version { $VERSION }

1;


$ cat Uses_version.pm
package Uses_version.pm;

use version;  $VERSION = version->new(2.34);

1;


$ perl -wle 'use aliased "Module::Build::ModuleInfo";  print
ModuleInfo->new_from_file("Version_Sub.pm")->version;  print
ModuleInfo->new_from_file("Uses_version.pm")->version'
1.23
Can't call method "new" without a package or object reference at (eval 10)
line 8, <GEN1> line 3.


-- 
Insulting our readers is part of our business model.
        http://somethingpositive.net/sp07122005.shtml

Reply via email to