@@ -10,7 +10,6 @@ package Module::Metadata;
10
10
# perl modules (assuming this may be expanded in the distant
11
11
# parrot future to look at other types of modules).
12
12
13
- sub __clean_eval { eval $_ [0] }
14
13
use strict;
15
14
use warnings;
16
15
@@ -25,6 +24,9 @@ BEGIN {
25
24
} or *SEEK_SET = sub { 0 }
26
25
}
27
26
use version 0.87;
27
+ use Module::Metadata::ExtractVersion ' eval_version' ;
28
+
29
+
28
30
BEGIN {
29
31
if ($INC {' Log/Contextual.pm' }) {
30
32
require " Log/Contextual/WarnLogger.pm" ; # Hide from AutoPrereqs
@@ -600,13 +602,23 @@ sub _parse_fh {
600
602
$need_vers = 0 if $version_package eq $package ;
601
603
602
604
unless ( defined $vers_raw {$version_package }[0] && length $vers_raw {$version_package }[0] ) {
603
- $vers_raw {$version_package } = [ $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line ), $line ];
605
+ $vers_raw {$version_package } = [ eval_version(
606
+ sigil => $version_sigil ,
607
+ variable_name => $version_fullname ,
608
+ string => $line ,
609
+ filename => $self -> {filename },
610
+ ), $line ];
604
611
}
605
612
606
613
# first non-comment line in undeclared package main is VERSION
607
614
} elsif ( $package eq ' main' && $version_fullname && !exists ($vers_raw {main }[0]) ) {
608
615
$need_vers = 0;
609
- my $v = $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line );
616
+ my $v = eval_version(
617
+ sigil => $version_sigil ,
618
+ variable_name => $version_fullname ,
619
+ string => $line ,
620
+ filename => $self -> {filename },
621
+ );
610
622
$vers_raw {$package } = [ $v , $line ];
611
623
push ( @packages , ' main' );
612
624
@@ -619,9 +631,14 @@ sub _parse_fh {
619
631
# only keep if this is the first $VERSION seen
620
632
} elsif ( $version_fullname && $need_vers ) {
621
633
$need_vers = 0;
622
- my $v = $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line );
623
-
624
- unless ( exists $vers_raw {$package }[0] && length $vers {$package }[0] ) {
634
+ my $v = eval_version(
635
+ sigil => $version_sigil ,
636
+ variable_name => $version_fullname ,
637
+ string => $line ,
638
+ filename => $self -> {filename },
639
+ );
640
+
641
+ unless ( exists $vers_raw {$package }[0] && length $vers_raw {$package }[0] ) {
625
642
$vers_raw {$package } = [ $v , $line ];
626
643
}
627
644
}
@@ -652,51 +669,6 @@ sub _parse_fh {
652
669
$self -> {pod_headings } = \@pod ;
653
670
}
654
671
655
- {
656
- my $pn = 0;
657
- sub _evaluate_version_line {
658
- my $self = shift ;
659
- my ( $sigil , $variable_name , $line ) = @_ ;
660
-
661
- # We compile into a local sub because 'use version' would cause
662
- # compiletime/runtime issues with local()
663
- $pn ++; # everybody gets their own package
664
- my $eval = qq{ my \$ dummy = q# Hide from _packages_inside()
665
- #; package Module::Metadata::_version::p${pn} ;
666
- use version;
667
- sub {
668
- local $sigil$variable_name ;
669
- $line ;
670
- \$ $variable_name
671
- };
672
- } ;
673
-
674
- $eval = $1 if $eval =~ m { ^(.+)} s ;
675
-
676
- local $^W;
677
- # Try to get the $VERSION
678
- my $vsub = __clean_eval($eval );
679
- # some modules say $VERSION <equal sign> $Foo::Bar::VERSION, but Foo::Bar isn't
680
- # installed, so we need to hunt in ./lib for it
681
- if ( $@ =~ / Can't locate/ && -d ' lib' ) {
682
- local @INC = (' lib' ,@INC );
683
- $vsub = __clean_eval($eval );
684
- }
685
- warn " Error evaling version line '$eval ' in $self ->{filename}: $@ \n "
686
- if $@ ;
687
-
688
- (ref ($vsub ) eq ' CODE' ) or
689
- croak " failed to build version sub for $self ->{filename}" ;
690
-
691
- my $result = eval { $vsub -> () };
692
- # FIXME: $eval is not the right thing to print here
693
- croak " Could not get version from $self ->{filename} by executing:\n $eval \n\n The fatal error was: $@ \n "
694
- if $@ ;
695
-
696
- return $result ;
697
- }
698
- }
699
-
700
672
# Try to DWIM when things fail the lax version test in obvious ways
701
673
{
702
674
my @version_prep = (
0 commit comments