From: Matt S Trout Date: Mon, 30 Jul 2012 19:55:54 +0000 (+0000) Subject: tentative attempt at version::fallback X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=p5sagit%2FModule-Metadata.git;a=commitdiff_plain;h=refs%2Fheads%2Fversion-fallback tentative attempt at version::fallback --- diff --git a/lib/Module/Metadata.pm b/lib/Module/Metadata.pm index e5910d0..6790052 100644 --- a/lib/Module/Metadata.pm +++ b/lib/Module/Metadata.pm @@ -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; }