On Feb 8, Steven M. Klass said:

>I am having some problems and I can't seem to get it right.  In short, I
>want to only modify text in a specific section.  That section is denoted
>by the following
>
<snip>
>*DESCRIPTION
>
><multiple line of text to be edited>
>
>*END
><snip>

This sounds like a job for the .. operator.  Let's see.

>Here is what I have.  I know the problem, I am reading this line by line so 
>when I find the DESCRIPTION I drop into the loop, but because I still have 
>DESCRIPTION obviously I won't search and replace.  
>
>open (RUNSET, $FLOW) || die "Can't access $FLOW[0][1]\n"; 
>while (<RUNSET>) {
>  if ($_ =~ m/DESCRIPTION/){
>    print "Entering description block";
>    until ( $_ =~ m/END\.){   

The problem is that you never read from <RUNSET> in this until() loop, so
$_ is never given the new line, and the loop goes on forever.  If you add:

       $_ = <RUNSET>;

here, it might work.

>      print "Entering until";
>#     next if /;/     # Remove Comments 
>      s/^\ INDISK\s+=.*/  INDISK        = $FILENAME     ; SMK /;
>      s/^\ PRIMARY\s+=.*/ PRIMARY              = $CELLNAME     ; SMK /;
>      }
>  }
>  print TEMPFLOW "$_";
>#  push @runset, $_ ; 
>}

But here's the Perlish way to write it:

  while (<RUNSET>) {
    if (/DESCRIPTION/ .. /END/) {
      # do the following in between a line matching
      # /DESCRIPTION/ and a line matching /END/

      s/^ INDISK\s+=.*/  INDISK        = $FILENAME     ; SMK /;
      s/^ PRIMARY\s+=.*/ PRIMARY        = $CELLNAME     ; SMK /;
    }
    print TEMPFLOW;
  } 

-- 
Jeff "japhy" Pinyan      [EMAIL PROTECTED]      http://www.pobox.com/~japhy/
RPI Acacia brother #734   http://www.perlmonks.org/   http://www.cpan.org/
** Look for "Regular Expressions in Perl" published by Manning, in 2002 **
<stu> what does y/// stand for?  <tenderpuss> why, yansliterate of course.


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to