For what it's worth, and i might be wrong, I suspect your program doesn't actually do what you want it to do. Unless you really do what to only consider every second record?
I've modified your data and fail test a little (in the second record) to deliberately make a fail state, rather than counting out to character 113... This does consider every record, and stops processing that data for the record if the fail condition is met...
#!/usr/bin/perl
use strict;
use warnings;
my @lines;
my $status;
my $recordTitle;
LINE: while(<DATA>)
{
@lines = split('', $_);
$status = 'TEST' if $lines[0] eq 'h';
$recordTitle = $_ if $lines[0] eq 'h';
chomp $recordTitle;
if($status eq 'TEST')
{
if($lines[0] eq 'j')
{
my $first = substr $_, 37, 20;
my $second = substr $_, 67, 3;
print STDERR "\nName: $first\tRECORD: $recordT
+itle\t ABICODE: $second\n";
}
if($lines[0] eq 'k')
{
my $qstatus = substr $_, 4, 9;
if($qstatus eq "TEST FAIL")
{
print STDERR "FAIL\n";
$status = 'FAIL'
}
}
if(($lines[0] eq 'E') || ($lines[0] eq 'G'))
{
print STDERR "$_";
}
}
}
__DATA__
h132BIK2
u3*** TEST DATA ***
u3*** COMMENT AREA FOR TEST DATA ***
j1000010017 6790194100109201301092013Test Data N PW09-3PY248
+018BIK20
k10 2R 1 0045.1011N01010215.820012.220006.0000000 0250M 1I
+nsured Only NYY01N00000.00N00000.00Y00000.
+00 000215.82000012.22000006.00
q0215.820215.820215.820215.820215.820000000000000000000002500250025002
+500250YY00000 01000215.82000215.82000215.82000215.82000215.82
l02001 0400000000
+0000000000000000000000000000000000000000
a000.00000.00000.0000
E99HEADER|004|001|
E99INSSCH|248|
E99POLCOM|3||CAP01|66|3301R7435459|||||
E99INSFAC2|MSRA01_1||||||"LNI10708"|
G3301R7435459:LNI10708
yIIDD0043.160019.0110018.9909M0000.000010.000233.08N0017.270023.500000
+43.16000019.01000018.99000000.00000010.00000233.08000017.27
h216BIK0
u3*** TEST DATA ***
u3*** COMMENT AREA FOR TEST DATA ***
pMU76 Nov 2010 A B C D E F G H
+ I J L
+
+ 0000000000
j1000010017 6790194100109201301092013Test Data M PW09-3PY248
+005BIK00
k10 TEST FAIL 2R 1 0045.1011N01010217.190012.290006.000000
+0 0250M 1Insured Only NYY01N00000.00N00000
+.00Y00000.00 000217.19000012.29000006.00
q0217.190217.190217.190217.190217.190000000000000000000002500250025002
+500250YY00000 01000217.19000217.19000217.19000217.19000217.19
l02001 0400000000
+0000000000000000000000000000000000000000
a000.00000.00000.0000
E99HEADER|004|001|
E99INSSCH|248|
E99POLCOM|3||CAP01|66|3301R7435459|||||
E99INSFAC2|MSRA01_1||||||"LNI10708"|
G3301R7435459:LNI10708
yIIDD0043.440019.1410019.1109M0000.000010.000234.57N0017.380023.500000
+43.44000019.14000019.11000000.00000010.00000234.57000017.38
h217BIK1
u3*** TEST DATA ***
u3*** COMMENT AREA FOR TEST DATA ***
pMU76 Nov 2010 A B C D E F G H
+ I J L
+ 0000000000
j1000010017 6790194100109201301092013Test Data L PW09-3PY248
+006BIK10
k10 2R 1 0045.1011N01010222.940012.620006.0000000 0250M 1I
+nsured Only NYY01N00000.00N00000.00Y00000.
+00 000222.94000012.62000006.00
q0222.940222.940222.940222.940222.940000000000000000000002500250025002
+500250YY00000 01000222.94000222.94000222.94000222.94000222.94
l02001 0400000000
+0000000000000000000000000000000000000000
a000.00000.00000.0000
E99HEADER|004|001|
E99INSSCH|248|
E99POLCOM|3||CAP01|66|3301R7435459|||||
E99INSFAC2|MSRA01_1||||||"LNI10708"|
G3301R7435459:LNI10708
yIIDD0044.590019.6110019.6209M0000.000010.000240.78N0017.840023.500000
+44.59000019.61000019.62000000.00000010.00000240.78000017.84
If you really do want to check only every second record, that's a different story...
I hope that helps!