in reply to Re: Multiple package versions (use only modules cpanfile pinto carton local::lib install_base))
in thread Multiple package versions
It's been a while since I've played with carton, but having to use carton exec to start the software is less than ideal imo, and I'm still not sure that it allows for the same application to be running multiple versions of a package. Picking a particular version of a library is pretty straight forward, it's running multiple at the same time that stumps me. Here's some code I put together to pick a particular version:
Below is how loadModule is usedpackage LoadModule; use strict; use warnings; my $wantedPackages; my $INC_LOADED; sub import { my $pkg = shift; my ($module, $version) = @_; $wantedPackages->{$module} = $version; push(@INC, \&loadLib) unless($INC_LOADED); $INC_LOADED = 1; } sub loadLib { my ($codeRef, $filename) = @_; my $moduleName = $filename; # Strip the implied pm $moduleName =~ s/\.pm$//; if(exists $wantedPackages->{$moduleName}) { my $package = $moduleName . "-" . $wantedPackages->{$moduleNam +e} . ".pm"; if(-e "./lib/$package") { my $fh; open($fh, "<", "./lib/$package") || die "Can't open ./lib/ +$package: $!"; return($fh); } } else { return undef; } } 1;
package TestModule1; use LoadModule MyLib => 'v1'; use MyLib; sub doPrint { MyLib::foo(); } 1;
In the example above I have
Both with slightly different behavior but with the same overall code.lib/MyLib-v1.pm and lib/MyLib-v2.pm
Tihs works great for the first module loaded. However, if I load other version of the same module they don't seem to get loaded (I suspect there's namespace collision).
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^3: Multiple package versions (use only modules cpanfile pinto carton local::lib install_base))
by Anonymous Monk on Jun 13, 2015 at 01:22 UTC |