in reply to Re^2: How can I print three lines before pattern match?
in thread How can I print three lines before pattern match?
Is the #file a reference to my data file?
No, not directly. Instead, the idea presented was to capture the whole file in @file:
my @file = <DATA>;
In your case, it would be <INFILE> instead of <DATA>. (<DATA> is a special file handle, starting after the special tag __DATA__ in the script, but otherwise pretty much a normal-behaving file handle.)
The $# in front of an array identifier means "the last index of" that array.
Perhaps better is to keep the last three lines in a fifo:
open(INFILE, "< file.log") or die "Cant open file : $!"; open(OUT, "> results.txt") or die "Cant open new file : $!"; $pattern = "Error code 2"; my @file; while (<INFILE>) { print OUT @file if (/$pattern/ and @file); push @file, $_; # push on the current line shift @file while (@file > 3); # shorten to 3 elements } close INFILE; close OUT;
Don't forget warnings and strict.
-QM
--
Quantum Mechanics: The dreams stuff is made of
|
|---|