sub VERSION { my ($module, $version) = @_; return $VERSION unless $version; # satisfy UNIVERSAL::VERSION() do { require File::Spec; require File::Basename; my $file = File::Spec->catfile( split /::/, $module ) . ".pm"; my $dir; $dir = File::Basename::dirname( $dir || $INC{$file} ) for 0 .. $module =~ /::/g; for my $dir ( local @INC = grep { !/^$dir$/ && -e File::Spec->catfile( $_, $file ) } @INC ) { open MOD, "<", File::Spec->catfile( $dir, $file ) or warn "$@"; grep { /(.*VERSION.*)/ and eval "eval '$1' == $version" and do { delete $INC{$file}; eval " require $module; $module->VERSION " == $version and do return $version ; shift @INC; } } ; } require Carp; Carp::croak(" Loading $module ($version) failed. "); } unless ($version == $VERSION); }