in reply to _utf8_on in taint mode

Using a function which has a name beginning with an underscore should be your first clue that you're doing something wrong.

OTOH, using binmode($fh, ':utf8'); and not realizing you're letting in things that aren't utf8 and will make your program potentially blow up at some undetermined later point (or just behave strangely) is *far* too easy a mistake to make (and one that I've made more then once, thinking back).