> How's abouts this (pls excuse any syntax errs) .....
>
> my $out1 = "$file1.txt";
> my $out2 = "$file2.txt";
>
> open(INPUT, $filename) or die "error: $filename cannot be opened\n";
> open(OUT1, ">$out1") or die "error: $out1 cannot be opened
> for writing\n";
> open(OUT2, ">$out2") or die "error: $out2 cannot be opened
> for writing\n";
>
> my $regex_split_space='\s+';
> my $regex_marker='^marker';
> my $regex_header='^header';
>
> while (<INPUT>) { # read file line by line
> next if m/$regex_header/; # skip if header line
> next if m/$regex_marker/; # skip if marker line
> if (/^.*?\s\+1\s\+/) { # true if '1' is sandwiched by
> 1st & 2nd '\s+'
> print OUT1;
> }
> else {
> if (/^.*?\s\+2\s\+/) { # true if '2' is sandwiched
> by 1st & 2nd
> '\s+'
> print OUT2;
> }
> else {
> die "saw something other than a 1 or 2 line\n";
> }
> }
> }
The last suggestion I would make here, since you're concerned about raw
speed, is to use substr whenever possible instead of regular
expressions. For instance, instead of using
my $regex_marker = '^marker'; # whitespace around = please!
...
next if m/$regex_header/;
it would most likely be faster to use
my $mark_str = 'marker';
...
next if substr($_, 0, length $mark_str) eq $mark_str;
Note that this will work only when you're looking for a fixed string in
a fixed place.
Luke
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>