in reply to why is substr behaving odd?

I'm a little confused by your problem but I'll offer the following advice anyways. If you simply want the last 1000 characters of a string the following should be sufficient:
my $sub = substr($seq, -1000);
Your substr doc should point out that negative positions work from the end of the string.