Well, OP updated the code, including some definitions, but @proteome array is still undefined!
Again, review the terminating conditions for each loop... I think you are going far away the end of the array, until no more memory is able to assign to @proteome. Do not use == as the index variable is being increased conditionaly inside inside the loop more than once without checking it's limit.
Also, check what happens if the $proteome[$index] does not match some of the REs... may be array @hold is full of undef's.