[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ale] Perl Question
- Subject: [ale] Perl Question
- From: fletch at phydeaux.org (Fletch)
- Date: 16 Oct 2000 15:38:41 -0400
>>>>> "Ken" == Ken Nagorski <kenn at pcintelligent.com> writes:
Ken> But checking the next line wasn't the problem, if the pattern
Ken> matched I wanted to line above it and below it. See why redo
Ken> didn't help? Even though I solved my current problem I would
Ken> still love to know how to do this.
my $prevline = '';
while( <> ) {
if( /somepattern/ ) {
my $nextline = <>;
print $prevline, $_, $nextline;
$prevline = $_; $_ = $nextline;
redo
} else {
$prevline = $_
}
}
You can change $prevline to @prevlines and use shift and push
to generalize this for remembering more than just one line (i.e. the
last n lines).
Or for small enough files (or where you have gobs of swap for
large files) and you don't mind slurping it all into RAM:
my @lines = <>;
print @lines[0,1] if $lines[0] =~ /somepattern/;
foreach( 1 .. $#lines-1 ) {
print @lines[ $_-1 .. $_+1 ] if $lines[$_] =~ /somepattern/;
}
print @lines[-2,-1] if $lines[-1] =~ /somepattern/;
--
Fletch | "If you find my answers frightening, __`'/|
fletch at phydeaux.org | Vincent, you should cease askin' \ o.O'
678 443-6239(w) | scary questions." -- Jules =(___)=
| U
--
To unsubscribe: mail majordomo at ale.org with "unsubscribe ale" in message body.