diff options
author | Kenichi Ishigaki <ishigaki@cpan.org> | 2014-12-05 01:24:43 +0900 |
---|---|---|
committer | Kenichi Ishigaki <ishigaki@cpan.org> | 2014-12-05 01:24:43 +0900 |
commit | 3e30d775406aae5591d5fbb1f8c6fd35a134b414 (patch) | |
tree | 4c5173d8701ed99cb9166aa5d56811496f0a0d16 /lib/Parse | |
parent | ec51bed3d30aa983ce0b8eb985f53566f82af790 (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.pm | 11 |
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; |