I find that if I add comments as I go, writing code is much easier. Here's some code that works for me:
#!/usr/bin/perl
use strict;
{
# Get filename, starting regex and stopping regex
# from the command line.
my ( $filename, $start, $stop ) = @ARGV;
# Check the inputs, open the file.
die "ERROR: Need to define start and stop arguments."
unless ( defined($start) && defined($stop) );
open(INPUT, $filename) or
die "Unable to open $filename: $!";
# Loop through the file, looking for the starting
# regexp and skipping lines till then.
while(<INPUT>) {
if ( /$start/ ) {
# Found the matching line! Print it, and start
# looking for the stopping regexp.
print;
while(<INPUT>) {
# If we found the stopping regexp, drop out
# of this loop; otherwise, print a line and
# keep going.
if ( /$stop/ ) { last; } else { print; }
}
}
}
close(INPUT);
}
I've grabbed all of the arguments from the command line right at the start -- this is far easier than trying to remember what's still left to be read in later.
The advantage to this code is that it will find multiple occurrences of start/stop in a single file.
Alex / talexb / Toronto
"Groklaw is the open-source mentality applied to legal research" ~ Linus Torvalds
|