perl: distinct list of modules introduced in v5.8
[sheet.git] / perl.plp
index 99863ff4ed625fed79754b1f543c885174ad92aa..57a7dc84da6ef4cbabd0e5f619fc8e033d72d64b 100644 (file)
--- a/perl.plp
+++ b/perl.plp
@@ -32,9 +32,13 @@ eval {
        use Time::Piece;
        use Time::Seconds;
 
-       my @versions = sort keys %{$info};
        my $now = Time::Piece->new;
-       $now = $now->strptime($_, '%Y-%m-%d') for $get{at} // ();
+       if (my $ts = $get{at}) {
+               $now = $now->strptime($ts, '%Y-%m-%d');
+               say "Compatibility details emulated for <em>$ts</em>.";
+       }
+       my $ts = $now->strftime('%F');
+       my @versions = sort grep { $info->{$_}{release} le $ts } keys %{$info};
 
        # perlpolicy: «We "officially" support the two most recent stable release
        # series. [...] we will attempt to fix critical issues»
@@ -96,15 +100,27 @@ for my $vernum (reverse sort keys %{$info}) {
                        if ($attr->{experimental}) {
                                $title = sprintf '<span title="experimental::%s">%s</span>',
                                        $attr->{experimental}, $title;
+                               $attr->{name} //= $attr->{experimental};
                        }
                        if ($attr->{feature}) {
                                my $prefix = sprintf '<span title="%s">feature</span>',
                                        $attr->{feature};
                                $title = join ', ', $prefix, $title // ();
+                               $attr->{name} //= $attr->{feature};
                        }
-                       $desc .= sprintf ' <em class="ex">(%s)</em>', $title;
+                       $desc .= sprintf ' <em class="ex">(%s)</em>', $title if $title;
+               }
+               my $ref = defined $attr->{name} && sprintf ' id="%s"', $attr->{name};
+               say sprintf '<dt%s>%s<dd>%s', $ref, $topic, $desc || '<br/>';
+       }
+       if (my $mods = $verrow->{modules}) {
+               for (@{$mods}) {
+                       my ($name, $desc, $eg) = @{$_};
+                       my $ref = lc $name =~ s/::/_/gr;
+                       $desc .= sprintf ' <small>{<code>%s</code>}</small>', Entity($_) for $eg // ();
+                       printf '<dt id="%s"><code>use %s</code>', $ref, $name;
+                       say '<dd>', $desc;
                }
-               say sprintf '<dt>%s<dd>%s', $topic, $desc || '<br/>';
        }
        say sprintf '<dt>Unicode</dt><dd>v%s', $_ for $verrow->{unicode} || ();
        say '</dl>';