package 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->{$moduleName} . ".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;
##
##
lib/MyLib-v1.pm
and
lib/MyLib-v2.pm