Your while loop looks at one line at a time but your text says "synopsis (multi line)" ... D'oh!
Even if you are disconnected from the net you must have some modules installed, maybe you can have a look around and see if someone else got a useful module installed.
If not, let's hope the files are small enough to fit in memory
# Suck in the whole file
my $text = do { local $/; <$fh> };
# use a nested group to exclude the close tag
while ($text=~ m{<ReportHost[^>]*>(?:(?!</ReportHost>).)*</ReportHost>
+}s) {
# print out the content of each ReportHost tag
print "$1\n";
}
Untested! :)