47 lines · plain
1#!/usr/bin/perl2 3my %include = ();4my %included = ();5 6for my $text (<*.txt>) {7 open I, '<', $text || die "cannot read: $text";8 while (<I>) {9 if (/^include::/) {10 chomp;11 s/^include::\s*//;12 s/\[\]//;13 $include{$text}{$_} = 1;14 $included{$_} = 1;15 }16 }17 close I;18}19 20# Do we care about chained includes???21my $changed = 1;22while ($changed) {23 $changed = 0;24 while (my ($text, $included) = each %include) {25 for my $i (keys %$included) {26 # $text has include::$i; if $i includes $j27 # $text indirectly includes $j.28 if (exists $include{$i}) {29 for my $j (keys %{$include{$i}}) {30 if (!exists $include{$text}{$j}) {31 $include{$text}{$j} = 1;32 $included{$j} = 1;33 $changed = 1;34 }35 }36 }37 }38 }39}40 41while (my ($text, $included) = each %include) {42 if (! exists $included{$text} &&43 (my $base = $text) =~ s/\.txt$//) {44 print "$base.html $base.xml : ", join(" ", keys %$included), "\n";45 }46}47