(was: Regarding files) "Dharshana Eswaran" schreef: You really shouldn't quote text that is no longer relevant, such as signatures and mailing list tails. > Ruud: >> Dharshana Eswaran: >>> i am trying to grep for a string in the file and once i get the >>> string, I need to read few lines which occurs before the string. >> >> The classic (state machine) approach is to start storing strings from >> the start marker, so "typedef union" here, and discard the stored >> lines when the search string doesn't pop-up. > > Can you please help me with a small piece of code for the same logic > which you mentioned? #!/usr/bin/perl   use strict;   use warnings;   my $phase = 0;   my $s;   while (<>) {       if    (0 == $phase) {           /^\\s*typedef union\\s*(?:\\{\\s*)?$/             and ++$phase and $s = $_;       }       elsif (1 == $phase) {           $s .= $_;           if (/^\\s*}\\s*(\\w+)\\s*;\\s*$/) {               'CHANNEL_INFO_T' eq $1                 and ++$phase and last;               $s = '';               $phase--;           }       }       else { die "ugly phase($phase)"}   }   $phase == 2 and print $s; __END__ (untested) But a real parser would also catch variants such as typedef union {     TYPE_T type;    MODE_T mode; } CHANNEL_INFO_T; See also: http://search.cpan.org/search?query=balanced&mode=module --  Affijn, Ruud "Gewoon is een tijger." --  To unsubscribe, e-mail: beginners-unsubscribe@perl.org For additional commands, e-mail: beginners-help@perl.org http://learn.perl.org/