Listing 2. Perl Code Without Documentation

#!/usr/bin/perl
$begin_code_pat = "^\@begin code";
$end_code_pat   = "^\@end code";
$code_line_pat = "^\@text";
$index_prefix = "\@index defn";
sub process_code_chunk {
    while ( ($_ = <>) && !/$end_code_pat/o ) {
        print $_;
        if( /$code_line_pat/o ) {
           $_ =~ s/#.*//o;
           @def_list = (/sub\s(\w+)/go,
                       /package\s(\w+)/go);
           foreach $item (@def_list) {
               print "$index_prefix $item\n";
           }
        }
    }
# make sure we print the "@end code" line
    print $_;
}
while ( <> ) {
    print $_;
    if (/$begin_code_pat/o) {
        process_code_chunk;
    }
}