summaryrefslogtreecommitdiff
path: root/lib/Parse
diff options
context:
space:
mode:
authorKenichi Ishigaki <ishigaki@cpan.org>2014-12-05 01:24:43 +0900
committerKenichi Ishigaki <ishigaki@cpan.org>2014-12-05 01:24:43 +0900
commit3e30d775406aae5591d5fbb1f8c6fd35a134b414 (patch)
tree4c5173d8701ed99cb9166aa5d56811496f0a0d16 /lib/Parse
parentec51bed3d30aa983ce0b8eb985f53566f82af790 (diff)
reimport overload into version::vpp only if 'use version' statement doesn't exist in the VERSION line
Diffstat (limited to 'lib/Parse')
-rw-r--r--lib/Parse/PMFile.pm11
1 files changed, 6 insertions, 5 deletions
diff --git a/lib/Parse/PMFile.pm b/lib/Parse/PMFile.pm
index 8fe8739..031720c 100644
--- a/lib/Parse/PMFile.pm
+++ b/lib/Parse/PMFile.pm
@@ -226,9 +226,10 @@ sub _parse_version {
if (ref $err) {
if ($err->{line} =~ /([\$*])([\w\:\']*)\bVERSION\b.*?\=(.*)/) {
local($^W) = 0;
- $self->_restore_overloaded_stuff if version->isa('version::vpp');
- $v = ($self->{UNSAFE} || $UNSAFE) ? eval $3 : $comp->reval($3);
- $v = $$v if $1 eq '*' && ref $v;
+ my ($sigil, $vstr) = ($1, $3);
+ $self->_restore_overloaded_stuff(1) if $err->{line} =~ /use\s+version\b/;
+ $v = ($self->{UNSAFE} || $UNSAFE) ? eval $vstr : $comp->reval($vstr);
+ $v = $$v if $sigil eq '*' && ref $v;
}
if ($@ or !$v) {
$self->_verbose(1, sprintf("reval failed: err[%s] for eval[%s]",
@@ -265,7 +266,7 @@ sub _parse_version {
}
sub _restore_overloaded_stuff {
- my $self = shift;
+ my ($self, $used_version_in_safe) = @_;
return if $self->{UNSAFE} || $UNSAFE;
no strict 'refs';
@@ -288,7 +289,7 @@ sub _restore_overloaded_stuff {
charstar;
overload->import;
}
- {
+ if (!$used_version_in_safe) {
package # hide from PAUSE
version::vpp;
overload->import;