#!/usr/bin/perl use strict; my ($cur, %gparts, %lparts, $main); sub safecat { my ($x,$y) = @_; defined $x ? $x . $y : $y; } sub accumulate { my (%lparts) = @_; for (keys %lparts) { $gparts{$_} = safecat($gparts{$_}, $lparts{$_}); } } while (<>) { /^\n$/ and next; if (/^%%\+(.*)/) { $cur = $1; next } if (/^%%\=(.*)/) { $main .= $gparts{$1}; next } if (/^%%\!/) { undef $cur; accumulate(%lparts); undef %lparts; next } if (/^%%\./) { undef $cur; undef %lparts; next } # skip this section if (defined $cur) { $lparts{$cur} = safecat($lparts{$cur}, $_); } else { $main .= $_; } } print $main;