@@ -514,7 +514,7 @@ sub _parse_fh {
514
514
my ($self , $fh ) = @_ ;
515
515
516
516
my ( $in_pod , $seen_end , $need_vers ) = ( 0, 0, 0 );
517
- my ( @packages , %vers , %pod , @pod );
517
+ my ( @packages , %vers_raw , % vers , %pod , @pod );
518
518
my $package = ' main' ;
519
519
my $pod_sect = ' ' ;
520
520
my $pod_data = ' ' ;
@@ -590,43 +590,39 @@ sub _parse_fh {
590
590
push ( @packages , $package ) unless grep ( $package eq $_ , @packages );
591
591
$need_vers = defined $version ? 0 : 1;
592
592
593
- if ( not exists $vers {$package } and defined $version ){
594
- # Upgrade to a version object.
595
- my $dwim_version = eval { _dwim_version($version ) };
596
- croak " Version '$version ' from $self ->{filename} does not appear to be valid:\n $line \n\n The fatal error was: $@ \n "
597
- unless defined $dwim_version ; # "0" is OK!
598
- $vers {$package } = $dwim_version ;
593
+ if ( not exists $vers_raw {$package }[0] and defined $version ){
594
+ $vers_raw {$package } = [ $version , $line ];
599
595
}
600
596
601
597
# VERSION defined with full package spec, i.e. $Module::VERSION
602
598
} elsif ( $version_fullname && $version_package ) {
603
599
push ( @packages , $version_package ) unless grep ( $version_package eq $_ , @packages );
604
600
$need_vers = 0 if $version_package eq $package ;
605
601
606
- unless ( defined $vers {$version_package } && length $vers {$version_package } ) {
607
- $vers {$version_package } = $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line );
602
+ 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 ] ;
608
604
}
609
605
610
606
# first non-comment line in undeclared package main is VERSION
611
- } elsif ( $package eq ' main' && $version_fullname && !exists ($vers {main }) ) {
607
+ } elsif ( $package eq ' main' && $version_fullname && !exists ($vers_raw {main }[0] ) ) {
612
608
$need_vers = 0;
613
609
my $v = $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line );
614
- $vers {$package } = $v ;
610
+ $vers_raw {$package } = [ $v , $line ] ;
615
611
push ( @packages , ' main' );
616
612
617
613
# first non-comment line in undeclared package defines package main
618
- } elsif ( $package eq ' main' && !exists ($vers {main }) && $line =~ / \w / ) {
614
+ } elsif ( $package eq ' main' && !exists ($vers_raw {main }[0] ) && $line =~ / \w / ) {
619
615
$need_vers = 1;
620
- $vers {main } = ' ' ;
616
+ $vers_raw {main } = [ ' ' , $line ] ;
621
617
push ( @packages , ' main' );
622
618
623
619
# only keep if this is the first $VERSION seen
624
620
} elsif ( $version_fullname && $need_vers ) {
625
621
$need_vers = 0;
626
622
my $v = $self -> _evaluate_version_line( $version_sigil , $version_fullname , $line );
627
623
628
- unless ( defined $vers {$package } && length $vers {$package } ) {
629
- $vers {$package } = $v ;
624
+ unless ( exists $vers_raw {$package }[0] && length $vers {$package }[0] ) {
625
+ $vers_raw {$package } = [ $v , $line ] ;
630
626
}
631
627
}
632
628
@@ -636,6 +632,20 @@ sub _parse_fh {
636
632
$pod {$pod_sect } = $pod_data ;
637
633
}
638
634
635
+ # Upgrade the found versions into version objects
636
+ foreach my $package (keys %vers_raw ) {
637
+ # watch out for autovivification at the first level of the hash
638
+ delete ($vers_raw {$package }), next if not exists $vers_raw {$package }[0];
639
+ my $version = eval { _dwim_version($vers_raw {$package }[0]) };
640
+
641
+ croak " Version '$vers_raw {$package }[0]' from $self ->{filename} does not appear to be valid:\n $vers_raw {$package }[1]\n\n The fatal error was: $@ \n "
642
+ unless defined $version ; # "0" is OK!
643
+
644
+ $vers_raw {$package } = $vers_raw {$package }[0];
645
+ $vers {$package } = $version ;
646
+ }
647
+
648
+ $self -> {versions_raw } = \%vers_raw ;
639
649
$self -> {versions } = \%vers ;
640
650
$self -> {packages } = \@packages ;
641
651
$self -> {pod } = \%pod ;
@@ -683,14 +693,7 @@ sub _evaluate_version_line {
683
693
croak " Could not get version from $self ->{filename} by executing:\n $eval \n\n The fatal error was: $@ \n "
684
694
if $@ ;
685
695
686
- # Upgrade it into a version object
687
- my $version = eval { _dwim_version($result ) };
688
-
689
- # FIXME: $eval is not the right thing to print here
690
- croak " Version '$result ' from $self ->{filename} does not appear to be valid:\n $eval \n\n The fatal error was: $@ \n "
691
- unless defined $version ; # "0" is OK!
692
-
693
- return $version ;
696
+ return $result ;
694
697
}
695
698
}
696
699
0 commit comments