in reply to Read forward and backward - need help

The following code should do what you want. Essentially, it's a finite state machine.

Hope this helps, -gjb-

use strict; use warnings; my $currentPos; my $processing = 0; while (<DATA>) { chomp($_); if ($_ eq q(START OF RECORD)) { $currentPos = tell(DATA); } elsif (/INFORMATION I AM LOOKING FOR/ && !$processing) { seek(DATA, $currentPos, 0); $processing = 1; } elsif ($_ eq q(END OF RECORD)) { $processing = 0; } elsif ($processing) { print "$_\n"; } } __DATA__ START OF RECORD LINE 1 INFORMATION I AM NOT LOOKING FOR LINE 3 LINE 4 LINE 5 LINE 6 END OF RECORD START OF RECORD LINE 1 ok INFORMATION I AM LOOKING FOR LINE 3 ok LINE 4 ok LINE 5 ok LINE 6 ok END OF RECORD START OF RECORD LINE 1 LINE 2 LINE 3 LINE 4 INFORMATION I AM NOT LOOKING FOR LINE 6 END OF RECORD START OF RECORD LINE 1 ok LINE 2 ok LINE 3 ok LINE 4 ok INFORMATION I AM LOOKING FOR LINE 6 ok END OF RECORD

Replies are listed 'Best First'.
Re: Re: Read forward and backward - need help
by Anonymous Monk on Jan 17, 2003 at 22:24 UTC
    Thanks - I am sure a variation on this is exactly what I am looking for. Not that the other solutions were not also good, but the records will vary in size so modifying $/ isn't a viable option because of the memory issue.