tentative attempt at version::fallback version-fallback
Matt S Trout [Mon, 30 Jul 2012 19:55:54 +0000 (19:55 +0000)]
lib/Module/Metadata.pm

index e5910d0..6790052 100644 (file)
@@ -10,14 +10,23 @@ package Module::Metadata;
 # parrot future to look at other types of modules).
 
 use strict;
-use vars qw($VERSION);
+use vars qw($VERSION $V_CLASS);
 $VERSION = '1.000010';
 $VERSION = eval $VERSION;
 
 use Carp qw/croak/;
 use File::Spec;
 use IO::File;
-use version 0.87;
+use version;
+BEGIN {
+  $V_CLASS = 'version';
+  unless (eval { version->VERSION(0.87) }) {
+    require version::fallback;
+    version::fallback->VERSION(0.87);
+    version::fallback->import;
+    $V_CLASS = 'version::fallback';
+  }
+}
 BEGIN {
   if ($INC{'Log/Contextual.pm'}) {
     Log::Contextual->import('log_info');
@@ -100,8 +109,8 @@ sub new_from_module {
   
   my $compare_versions = sub {
     my ($v1, $op, $v2) = @_;
-    $v1 = version->new($v1)
-      unless UNIVERSAL::isa($v1,'version');
+    $v1 = $V_CLASS->new($v1)
+      unless UNIVERSAL::isa($v1,$V_CLASS);
   
     my $eval_str = "\$v1 $op \$v2";
     my $result   = eval $eval_str;
@@ -115,7 +124,7 @@ sub new_from_module {
     if ( $version =~ /[=<>!,]/ ) { # logic, not just version
       # take as is without modification
     }
-    elsif ( ref $version eq 'version' ) { # version objects
+    elsif ( ref $version eq $V_CLASS ) { # version objects
       $version = $version->is_qv ? $version->normal : $version->stringify;
     }
     elsif ( $version =~ /^[^v][^.]*\.[^.]+\./ ) { # no leading v, multiple dots
@@ -627,7 +636,7 @@ sub _evaluate_version_line {
   $pn++; # everybody gets their own package
   my $eval = qq{BEGIN { q#  Hide from _packages_inside()
     #; package Module::Metadata::_version::p$pn;
-    use version;
+    use $V_CLASS;
     no strict;
 
       \$vsub = sub {
@@ -706,12 +715,12 @@ sub _evaluate_version_line {
   sub _dwim_version {
     my ($result) = shift;
 
-    return $result if ref($result) eq 'version';
+    return $result if ref($result) eq $V_CLASS;
 
     my ($version, $error);
     for my $f (@version_prep) {
       $result = $f->($result);
-      $version = eval { version->new($result) };
+      $version = eval { $V_CLASS->new($result) };
       $error ||= $@ if $@; # capture first failure
       last if defined $version;
     }