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