The following script will extract all .define definitions and put them in a hash, where the keys are the names of the definitions and the values are the definition itself.
use strict;
use Data::Dumper ;
my %defines;
my $flag_in_define = 0;
my $name;
MAIN_LOOP: while (<DATA>) {
if (m/^\.define (.*)/) {
$flag_in_define = 1;
$name = $1;
next MAIN_LOOP;
}
if (m/^\.\./) {
$flag_in_define = 0;
next MAIN_LOOP;
}
if ($flag_in_define) {
chomp;
$defines{$name} .= $_;
next MAIN_LOOP;
}
}
print Dumper(\%defines);
__DATA__
rem ------------------------ book_tab variables ---------------------
.rem
.declare book_no a13
.declare l_code a10
.declare l_booking a12
.set page_no 1
.set first "N"
.set no_more_clauses "N"
#dt 1 1 80 #
#dt 2 1 6 9 48 50 61 63 76 80 80 #
.define loktabs
loc_table book_tab, book_hazmat, custdata2, edit_table,
book_rates, print_table in share update mode
..
.define get_input
select key, key1, key2,
passkey3, passkey4, print_name
into input_booking_seq, fax_header, file_no,
input_print_rates, myNoteId, print_name
from ed_table
where ed_table.tag = 'BOOK'
and ed_table.key = 'PRINT'
and ed_table.user_id = user
..
.define get_user_info
select user_loc,user_name, user_company,
into user_location, user_name, user_company,
from sec_header
where user_id = lower(substr(user,5,10))
..
.execute lok_tabs
.execute get_user_info
You might wish to clean-up the definitions and remove multiple spaces.Also note that it extracts all definitions not only those which start with "select".
CountZero A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James
|