| #!/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; |