Be stricter about which =XXX are POD keywords
[p5sagit/Module-Metadata.git] / lib / Module / Metadata.pm
index d0b470d..e5910d0 100644 (file)
@@ -61,6 +61,9 @@ my $VERS_REGEXP = qr{ # match a VERSION definition
   =[^=~]  # = but not ==, nor =~
 }x;
 
+my $PODSECT_REGEXP = qr{
+ ^=(cut|pod|head[1-4]|over|item|back|begin|end|for|encoding)\b
+}x;
 
 sub new_from_file {
   my $class    = shift;
@@ -496,10 +499,9 @@ sub _parse_fh {
     my $line_num = $.;
 
     chomp( $line );
-    next if $line =~ /^\s*#/;
 
     my $is_cut;
-    if ( $line =~ /^=(.{0,3})/ ) {
+    if ( $line =~ /$PODSECT_REGEXP/o ) {
       $is_cut = $1 eq 'cut';
       $in_pod = !$is_cut;
     }
@@ -509,7 +511,7 @@ sub _parse_fh {
 
     if ( $in_pod ) {
 
-      if ( $line =~ /^=head\d\s+(.+)\s*$/ ) {
+      if ( $line =~ /^=head[1-4]\s+(.+)\s*$/ ) {
        push( @pod, $1 );
        if ( $self->{collect_pod} && length( $pod_data ) ) {
           $pod{$pod_sect} = $pod_data;
@@ -532,6 +534,9 @@ sub _parse_fh {
 
     } else {
 
+      # Skip comments in code
+      next if $line =~ /^\s*#/;
+
       # parse $line to see if it's a $VERSION declaration
       my( $vers_sig, $vers_fullname, $vers_pkg ) =
           ($line =~ /VERSION/)
@@ -541,7 +546,7 @@ sub _parse_fh {
       if ( $line =~ /$PKG_REGEXP/o ) {
         $pkg = $1;
         push( @pkgs, $pkg ) unless grep( $pkg eq $_, @pkgs );
-        $vers{$pkg} = (defined $2 ? $2 : undef)  unless exists( $vers{$pkg} );
+        $vers{$pkg} = $2 unless exists( $vers{$pkg} );
         $need_vers = defined $2 ? 0 : 1;
 
       # VERSION defined with full package spec, i.e. $Module::VERSION