Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re^3: How can I print three lines before pattern match?

by QM (Parson)
on Aug 14, 2009 at 03:02 UTC ( #788500=note: print w/replies, xml ) Need Help??

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.

Quantum Mechanics: The dreams stuff is made of

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://788500]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (8)
As of 2016-10-21 14:23 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (289 votes). Check out past polls.