#!/usr/bin/perl use strict; use warnings; # Check __BEGIN_NAMESPACE ... __END_NAMESPACE pairing in an include file. my $code = 0; for my $path (@ARGV) { my $localcode = 0; my @stack; open my $in, '<', $path or die "open $path failed: $!"; while (<$in>) { if ( /^\s*__BEGIN_(.*)\b/ ) { push @stack, $1; } elsif ( /^\s*__END_(.*)\b/ ) { if (@stack) { my $tag = pop @stack; if ($1 ne $tag) { print "$path:$.: BEGIN $tag paired with END $1\n"; $localcode = 1; } } else { print "$path:$.: END $1 does not match a begin\n"; $localcode = 1; } } } if (@stack) { print "$path: Unmatched begin tags " . join (' ', @stack) ."\n"; $localcode = 1; } if ($localcode == 0) { print "$path: OK\n"; } else { $code = $localcode; } } exit $code;