I tried with Chinese characters, each has three bytes when encoded in utf8, the same as Japanese. Couple of things from my testing (on Win32):
About ord: ord simply takes whatever you give it as a byte, and returns the value of that byte. This has nothing to do with the language or the encoding schema. It is byte semantics, doesn't matter whether you specify use utf8 or not. This makes sense.
About encoding: The encding schema determines the value returns from ord. For example, if you use utf8, then each Japanese character is encoded as a stream of three bytes, following this value pattern: 1110nnnn, 10nnnnnn, 10nnnnnn.
About length: Tested in Perl 5.8.0. My data file is Chinese encoded in utf8. It doesn't matter whether I specify 'use utf8' in the script or not, the result returned is always the same, which is the number of bytes, so this is also byte semantics, again it makes sense.
About split: with Perl 5.6.1, if I specify use utf8, then the character semantics is forced. For example, split(//, $str) returns a list of strings, and each of the strings is three bytes in length, which is the length of one Chinese character. If I don't specify use utf8, it follows byte semantics.
It does make sense, however is broken in Perl 5.8.0. A feature? no way, I believe this is a bug in Perl 5.8.0.