open(DNA,"<$filename") or croak("Cannot open $filename:$!\n"); FASTAKEY: for my $g (@fastarray){ print "\$g is: $g\n"; if (@{$sets{$g}}){ print "This \$g, $g, has a set.\n"; $buffer = ''; my $skip = 0; my $i = 0; $position = 0; $num = (@{$sets{$g}}); LINE: while ($newline = ) { if ($skip == 1) { unless ($newline =~ /^>/) { next LINE; } if ($newline =~ /^>/) { $skip = 0; goto NOSKIP; } } else { # If new fasta header, NOSKIP: if($newline =~ /^>/) { print "....We've hit a newline, which is: $newline"; if ($buffer eq '') { chomp $newline; print "We are in the 'if buffer eq' loop.\n"; print "..\$g is: $g, and \$newline is $newline\n"; if ($newline ne $g) { $skip = 1; next LINE; } if ($newline eq $g) { $header = $newline; $g = $header; $skip = 0; print "Gathering sequence data from sequence $g\n"; next LINE; } # closes if buffer eq '' } else { # ($buffer ne '') FINISH: print "......At FINISH, \$num is: $num, and \$i is: $i\n"; if ($i == $num) { print "in FINISH, \$i is: $i, and \$num is $num. They should be equal\n"; $position = 0; $skip = 1; seek(DNA,(0-length($buffer)),1); $len = 0; $buffer = ''; next FASTAKEY; } else { print "in FINISH, \$i is: $i, and \$num is $num. They should not be equal\n"; print "\$i is: $i, \$HoA{$g}[$i][0] is: $HoA{$g}[$i][0], \$HoA{$g}[$i][1] is: $HoA{$g}[$i][1], \$position is: $position and length(\$buffer) is: ".length($buffer)."\n"; if ($HoA{$g}[$i][0] >= ($position + length($buffer))) {print "The position of \$lowest is past the end of the buffer! How did that happen?!\n";} if ($HoA{$g}[$i][1] < $position) {print "The position of \$highest is below that of \$position! How did this happen?!\n";} if ($HoA{$g}[$i][1] >= ($position + length($buffer))) { $match{$g}[$i] = uc(substr($buffer, ($HoA{$g}[$i][0] - $position))); } else { $match{$g}[$i] = uc(substr($buffer, ($HoA{$g}[$i][0] - $position), $HoA{$g}[$i][2])); } $i++; goto FINISH; # close uncommented else } #closes else ($buffer ne '' ) } # closes if newline } # closes else statement } chomp $newline; $buffer .= $newline; $len = length($newline); if (($position + $span) < $HoA{$g}[$i][0] && length($buffer) > $span) { # Reset the position counter # (will be accurate after you reset the buffer, next) $position += $span; # Reset the buffer # Discard the first $max worth of data in the buffer $buffer = substr($buffer, $span); } unless (length($buffer) >= $HoA{$g}[$i][2] && $position <= $HoA{$g}[$i][0] && (length($buffer) + $position) >= $HoA{$g}[$i][1]) { next LINE; } if ($i < $num) { $match{$g}[$i] = uc(substr($buffer, ($HoA{$g}[$i][0] - $position), $HoA{$g}[$i][2])); $i++; } if ($i == $num) { seek(DNA,(0-length($buffer)),1); $buffer = ''; $position = 0; $skip = 1; $len = 0; next FASTAKEY; } else { if ($position + $len < $HoA{$g}[$i][0]) { # Reset the position counter # (will be accurate after you reset the buffer, next) $position += $len; # Reset the buffer # Discard the first $max worth of data in the buffer $buffer = substr($buffer, $len); } $len = 0; next LINE; } # closes LINE } } # closes FASTAKEY } close(DNA) or croak("Cannot close $filename:$!\n"); print "Finished gathering all the sequences, now moving on.\n"; #### $g is: >LG_I This $g, >LG_I, has a set. ....We've hit a newline, which is: >LG_I We are in the 'if buffer eq' loop. ..$g is: >LG_I, and $newline is >LG_I Gathering sequence data from sequence >LG_I ....We've hit a newline, which is: >LG_II ......At FINISH, $num is: 73, and $i is: 68 in FINISH, $i is: 68, and $num is 73. They should not be equal $i is: 68, $HoA{>LG_I}[68][0] is: 22325699, $HoA{>LG_I}[68][1] is: 22326343, $position is: 33722650 and length($buffer) is: 1848919 The position of $highest is below that of $position! How did this happen?! substr outside of string at Test3 line 1483, line 508168. ......At FINISH, $num is: 73, and $i is: 69 in FINISH, $i is: 69, and $num is 73. They should not be equal $i is: 69, $HoA{>LG_I}[69][0] is: 27156174, $HoA{>LG_I}[69][1] is: 27156931, $position is: 33722650 and length($buffer) is: 1848919 The position of $highest is below that of $position! How did this happen?! substr outside of string at Test3 line 1483, line 508168. ......At FINISH, $num is: 73, and $i is: 70 in FINISH, $i is: 70, and $num is 73. They should not be equal $i is: 70, $HoA{>LG_I}[70][0] is: 10031764, $HoA{>LG_I}[70][1] is: 10032474, $position is: 33722650 and length($buffer) is: 1848919 The position of $highest is below that of $position! How did this happen?! substr outside of string at Test3 line 1483, line 508168. ......At FINISH, $num is: 73, and $i is: 71 in FINISH, $i is: 71, and $num is 73. They should not be equal $i is: 71, $HoA{>LG_I}[71][0] is: 22783500, $HoA{>LG_I}[71][1] is: 22784101, $position is: 33722650 and length($buffer) is: 1848919 The position of $highest is below that of $position! How did this happen?! substr outside of string at Test3 line 1483, line 508168. ......At FINISH, $num is: 73, and $i is: 72 in FINISH, $i is: 72, and $num is 73. They should not be equal $i is: 72, $HoA{>LG_I}[72][0] is: 28700514, $HoA{>LG_I}[72][1] is: 28701277, $position is: 33722650 and length($buffer) is: 1848919 The position of $highest is below that of $position! How did this happen?! substr outside of string at Test3 line 1483, line 508168. ......At FINISH, $num is: 73, and $i is: 73 in FINISH, $i is: 73, and $num is 73. They should be equal $g is: >LG_II This $g, >LG_II, has a set. ....We've hit a newline, which is: >LG_II ......At FINISH, $num is: 61, and $i is: 4 in FINISH, $i is: 4, and $num is 61. They should not be equal $i is: 4, $HoA{>LG_II}[4][0] is: 2635020, $HoA{>LG_II}[4][1] is: 2635237, $position is: 1822784 and length($buffer) is: 86 The position of $lowest is past the end of the buffer! How did that happen?! substr outside of string at Test3 line 1480, line 534211. ...and so on. it continues all the way up to $i is 61.