The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/bin/perl
my %seen;
while (<>) {
if (/^%\s*(include|require)\s+\"([^\"]+)\"/) {
include($2, ($1 eq "require"));
next;
}
print;
}
sub include
{
my($file, $require, $level) = @_;
$level ||= 0;
return if $seen{$file}++ && $require;
local(*FILE);
unless (open(FILE, $file)) {
print "% Can't include $file: $!\n";
print STDERR "$file: $!\n";
return;
}
print STDERR " " x $level;
print STDERR "include $file\n";
local($_);
while (<FILE>) {
if (/^%\s*(include|require)\s+\"([^\"]+)\"/) {
include($2, ($1 eq "require"), $level+1);
next;
}
print;
}
close(FILE);
}