<?xml version="1.0" encoding="windows-1252"?>
<node id="1005485" title="How to print the lines immediately above and below a matching line?" created="2012-11-25 08:11:47" updated="2012-11-25 08:11:47">
<type id="115">
perlquestion</type>
<author id="1005481">
Bio90</author>
<data>
<field name="doctext">
Hi all,

&lt;p&gt;I am trying to match a specific part of a line and print the line above and below it, in full.&lt;/p&gt;

Through various internet searches I have found this code which I believe is suitable to the task:

&lt;code&gt;use strict;
use warnings;

open( my $fh, '&lt;', 'input.txt') or die "Error opening file - $!\n";
open OUT, "&gt;", "output.txt" or die "could not open output.txt $! \n";

my $this_line = "";
my $do_next = 0;

while(&lt;$fh&gt;) {
    my $last_line = $this_line;
    $this_line = $_;

    if ($this_line =~ /&lt;DATA&gt;/) {
        print OUT $last_line unless $do_next;
        print OUT $this_line;
        $do_next = 1;
    } else {
        print OUT $this_line if $do_next;
        $last_line = "";
        $do_next = 0;
    }
}
close ($fh);

__DATA__
4386_7#8
4350_7#6
4414_1#6
4465_5#1
etc...&lt;/code&gt;

&lt;p&gt;The data are not a line by themselves, rather they are part of a line.&lt;/p&gt;

When I run this code the output produced is just a blank text file. It does not return any error messages, and I am sure that matches I am searching for are in the file I am searching.

&lt;p&gt;Any help as to what might be the problem would be much appreciated.&lt;/p&gt;

Thanks in advance,

&lt;p&gt;Bio&lt;/p&gt;</field>
</data>
</node>
