in reply to Write to multiple files according to multiple regex

Just one of your code lines to comment:
print @filehandles[$i] if (/@regex[$i]/../^END_OF_BLOCK/);
First, at the very least, to refer to elements of an array, this should be:
print $filehandles[$i] if (/$regex[$i]/../^END_OF_BLOCK/);
Second, I do not really see the point of the ../^END_OF_BLOCK/ part in your context.

Finally, I cannot test right now, but I don't think that:

print $filehandles[$i] $_;
is going to work properly. I think you probably need something like this:
print {$filehandles[$i]} $_;
Otherwise, some of the errors that you have would be picked up by the compiler if you had used the following pragmas:
use strict; use warnings;
at or near the top of your script file.