Refactor pod_lib.pl's get_pod_metadata() to remove a temporary array.
authorNicholas Clark <nick@ccl4.org>
Wed, 9 Nov 2011 12:40:59 +0000 (13:40 +0100)
committerNicholas Clark <nick@ccl4.org>
Fri, 18 Nov 2011 10:08:57 +0000 (11:08 +0100)
The intermediate array @cpanpods can be avoided by generating the lookup
hashes directly.

Rename %cpanpods_short to %cpanpods_leaf and $shortname to $leafname, as this
makes it clearer that each deals with leafnames.

Porting/pod_lib.pl

index 00ab4b7..684b494 100644 (file)
@@ -94,9 +94,9 @@ sub get_pod_metadata {
                 $state{pods}{$podname} = $desc;
             }
             my_die "Unknown flag found in section line: $_" if length $flags;
-            my $shortname = $podname =~ s{.*/}{}r;
+            my ($leafname) = $podname =~ m!([^/]+)$!;
             push @{$state{master}},
-                [\%flags, $podname, $filename, $desc, $shortname];
+                [\%flags, $podname, $filename, $desc, $leafname];
         } elsif (/^$/) {
             push @{$state{master}}, undef;
         } else {
@@ -108,7 +108,7 @@ sub get_pod_metadata {
     # Sanity cross check
 
     my (%disk_pods, %manipods, %manireadmes, %perlpods);
-    my (@cpanpods, %cpanpods, %cpanpods_short);
+    my (%cpanpods, %cpanpods_leaf);
     my (%our_pods);
 
     # These are stub files for deleted documents. We don't want them to show up
@@ -141,16 +141,15 @@ sub get_pod_metadata {
             next if $state{ignore}{$1};
             ++$manireadmes{"perl$1.pod"};
         } elsif (exists $our_pods{$_}) {
-            push @cpanpods, $_;
+            ++$cpanpods{$_};
+            m!([^/]+)$!;
+            ++$cpanpods_leaf{$1};
             $disk_pods{$_}++
                 if -e $_;
         }
     }
     close $mani or my_die "close MANIFEST: $!\n";
 
-    @cpanpods{@cpanpods} = map { s/.*\///r } @cpanpods;
-    %cpanpods_short = reverse %cpanpods;
-
     my $perlpod = open_or_die('pod/perl.pod');
     while (<$perlpod>) {
         if (/^For ease of access, /../^\(If you're intending /) {
@@ -185,7 +184,7 @@ sub get_pod_metadata {
     }
     foreach my $i (sort keys %perlpods) {
         push @inconsistent, "$0: $i is known by perl.pod but does not exist\n"
-            unless $disk_pods{$i} or $BuildFiles{$i} or $cpanpods_short{$i};
+            unless $disk_pods{$i} or $BuildFiles{$i} or $cpanpods_leaf{$i};
     }
     $state{inconsistent} = \@inconsistent;
     return \%state;