You might do something like this: #!/usr/bin/perl -w
use strict; # good to see you are using -w and strict...way to go! my $filename = "somefile"; # rename bit to found to be more descriptive my $found = 0; my $search = $ARGV[0]; # that should be $! ...you had !$ I suspect typo. open(FILE,$filename) or die ("Couldn't open file - $!\n"); while (<FILE>) { chomp; if ( /^-/ ) { # $_ is the default for matches $found = 0; # you only want to test against the next line, so get it my $line = <FILE>; chomp $line; if( $line =~ /^$search/o ) { # use the o modifier so it will only compile the regex once (it never changes)...you also don't need the *, by itself it will match like you want. $found = 1; } } if ($found) { print "$_\n"; } } close(FILE); ----- Original Message ----- From: "Eric Plowe" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, July 26, 2002 9:31 PM Subject: regex questions > Hello all. > > I am working on a script that searches through a text file - each > 'record' within the text file is separated by a - so for example: > > - > Fancy Car > > text text > text text > - > > and so on and so on. > > the first initial row of text is what I am searching for - then I can > handle parsing the rest of the text after that to the next delimiter. > > But right now with the script.. its really basic, you can pass a search > argument to it and it'll return results. but I need to narrow it down. > because it may return data I didnt search for. but it match to some > extent the input. Here's the script as I have it now. > > -- > #!/usr/bin/perl -w > > use strict; > > my $filename = "somefile"; > my $bit = 0; > my $search = $ARGV[0]; > > open(FILE,$filename) or die ("Couldn't open file - !$\n"); > > while (<FILE>) { > chomp; > if ($_ =~ /^-/) { > $bit = 2; > next; > } > > if ($_ =~ /^$search*/) { > $bit = 1; > } > > if ($bit == 1) { > print "$_\n"; > } > } > close(FILE); > -- > > the bit variables are there to basically do this: If the first line is > a - (the record delimiter) then set $bit to 2 and scroll to the next > line. If the line matches the inputed search - then set bit to 1 - so > then now as it scrolls through the while, as long as $bit hasn't been > changed to 2 - it'll print out each line until it hits the next '-' > > Now my question for the perl gurus is - How to optimize the regex (or > lack of) I am using to match my inputed search? all I want to test > against is the next line after a '-' and still attempt to match it even > if its not the exact word (ie: typing in 'off' it would match off, > office, Office, OFFICE, OFF, fell OFF the bike... i think you get my > point) Thanks! and I hoped I explained my question/problem clearly. > > ~Eric > > > -- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]