Hi Perl Monks,

I am using a range operator in matching #if(or)#ifdef(or)#ifndef to the corresponding #endif directive and remove the code in between them. If I have a nested #if directive my perl code doesn't work.

Here with I am posting a C code snippet

{ #if 1 #define done 9 #define do 10 #ifdef #define def1 11 #define thread 12 #endif #define mutex 13 #define inter 14 #endif #define intel 15 #define intel_64 16 }
from the current perl code the output is like this
{ #define mutex 13 #define inter 14 #endif #define intel 15 #define intel_64 16 }
but actually my output has to be like this
{ #define intel 15 #define intel_64 16 }
here is my perl code please help me out in tracking the nested #if using the range operator,
my ($start, $stop) = (qr '#ifdef|#if|#ifndef|#else', qr '#endif'); open(file1,$file) or die "Error opening input: " . $!; open(file2, ">$filea") or die "Error opening input: " . $!; while (<file1>) { if (/$start/ .. /$stop/) { next; } else { print file2 $_ ; } }

Thanks a lot,

-Prassi


In reply to nested #if directive matching matching by prassi

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.