Perl's current strategy on utf8, is to make it work with the least modification. In perlunicode, it is clearly stated that, Perl does not cover unicode standards from cover to cover. Also in another perl doc, I forgot which one, it is said that, Perl will remain like this until unicode is inescapable. This is something we have to be aware of all the time.
Perl's way of handling unicode I/O is a good evidence of this strategy. A layer called ':utf8' was inserted between your program and your descriptors. I would expect this to be totally revised, when Perl 6 comes out, otherwise I feel some real worry here.
To make this ':utf8' layer come to work, you have to explicitly add it. Yet this is something separate from the 'utf8' pragmas. That pragmas simply does not affect your I/O at all.
For ':utf' layer itself:
| Examples |
| at open | open(FILEHANDLE, "<:utf8", "abc.utf8.txt") |
| after open | binmode(STDOUT, ":utf8") |