There is only one $_ in your program and you did use it for two different purposes. One has to be careful sometimes with Perl's build-in variables.
From "Modern Perl", page 7: http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
As English gets confusing when you have too many pronouns and antecedents, you must take care mixing uses of $_ implicitly
or explicitly. Uncautious simultaneous use of $_ may lead to one piece of code silently overwriting the value written by another.
If you write a function which uses $_, you may clobber a caller function's use of $_.
UPDATE: In order to make your script more robust overall, you might also want to remove $_ from your outer loop.
foreach my $regex (@regexes){
($fileBodyMatch, $decode ) = checkFileBody ($file, $regex->{bodyre
+gex});
}