Folks,
I'm hoping someone can assist as I'm having difficulty with parsing a
section of the following configuration:
This is the code I have:
open (IN, $file); # only sharing this because you need to know
where @list is derived.
while (<IN>) {
chomp;
next unless /file-id/;
my $datum = $_;
$datum =~ s/(^\s+|\s+$)//g;
$datum =~ s/file-id //g;
push @list, $datum; # should only contain '1', and '3'
}
close IN;
# ideally this would take a snippet of that config
$count = 0;
foreach my $i (@list){ # loops through dynamically-learned file IDs
open (IN, $file);
while (<IN>) {
chomp;
if (/^ file-id $i/) {
$count = 1;
}
elsif (/^ exit/) { # this just keeps matching every exit
with that same indent
$count = 0;
}
elsif ($count) {
if (/text/) {
push @logfiles, $_; # successfully captures only what I
want in the array
}
}
}
close IN;
}
The first is to find all file-id lines then isolate for the number; the
second loop is to take a snip:
file-id 1
text
exit
What it winds up doing is:
file-id 1
text
exit
file-id 3
text
exit
* exit*
* exit*
* exit*
* exit*
* exit *
...
This is the nightmare config structure that I need to deal with throughout
the file...lots of "exits" so it matches an awful lot...
log
file-id 1
text
exit
file-id 3
text
exit
exit
The configuration is thousands of lines long, indented like that with exit
at various levels, so this is just one part of what I'm trying to analyze.
What it's doing is making the server work harder with all the extra stuff
it's catching and leaves me wide-open for false positives...
My question: does anyone have a better way to take those snippets, stopping
after the first match of "exit"? (Please don't flame, I'm asking for help.)
Amanda