Hello:

I've been away from the Learning Perl book for a few weeks and trying to refresh
my memory, but I'm stumped.  What I need to do is take the output of a command
(ovfiltercheck) that looks something like this:

### BIN OUTPUT BEGIN #####################
FilterExpressions {
  NetBackbone "Networks and gateways/routers"  { (Routers || Networks) }
  blah, blah,
}

Defined Filter List
===========
ATMnodes
Bridges
Segments

Defined Set List
================
FAILOVER_SET
WHWAN_INFRA_NODES
### BIN OUTPUT END ########################


and get it into an array (i.e @filters) that looks like this:
### @filters BEGIN ########################
ATMnodes
Bridges
Segments
### @filters END ##########################

My question is whethor or not its better to parse the data as I load the array
from the program output, or parse the array after the fact, or parse the array
after the fact multiple times  In either case I seem to get lost in trying to
use a foreach and shift at the same time, e.g.:

#### TRYING TO PARSE PURGE EVERYTHING TO "Defined Filter List" +two elements)
my @filters = `/opt/OV/bin/ovfiltercheck`;
foreach ( @filters ) {
  if ( m/Defined Filter List/ ) { # IF FIND FILTER SECTION
    shift;   # DELETE "Defined Filter List"
    shift;   # DELETE "================"
    last;    # EXIT FOREACH LOOP
  } else {
    shift;   # DELETE ELEMENTS
  }
}
# Make another foreach loop to dump elements after "Defined Set List"
print @filters;

In my mind, I'm thinking from DB perspective where I'm deleting the current
record, not just the element at the start (shift) or end of an array (push).  Is
there any way to dump an element anywhere? (e.g., pop $array[$anyElement] or
shift $anyElement[5])

### ANOTHER PATHETIC ATTEMPT
my ( @filters, $filters_begin, $filters_end) ;
open OVFILTERCHECK, "/opt/OV/bin/ovfiltercheck |" || die "Error, can't open:
$!\n";
while (<OVFILTERCHECK>) {
    if ( m/Defined Filter List/ ) { # WHEN I GET TO THE FILTER LIST
      $filters_begin = 1;           # SET A FLAG INDICATING SAME
    }
    if ( m/Defined Set List/ ) {    # WHEN PASS THE FILTER  SECTION
      last;                         # TERMINATE ARRAY LOADING
    }
    if ($filters_found) {           # IF FILTER SECTION HAS BEGUN
      $filters[$.++]  = $_;         # SAVE VALID FILTER NAMES TO @FILTERS
 }
print @filters;

Sorry for the crappy psuedocode that shows I don't have a clue.  Its been a long
day and my brain feels like its fried.  All I want to do is "cut" (save to an
array) the text between the words "Defined Filter List\n================" and
"\nDefined Set List".  Any help would be appreciated and a true solution worth a
Six Dollar burger & movie via PayPal (in other words, I'll pay out of pocket).

Thanks,

Lance

------------------------------------------------------------------------------
This message may contain confidential information, and is intended only for the use of 
the individual(s) to whom it is addressed.


==============================================================================

Reply via email to