in reply to any use of 'use locale'?

Just some thoughts... I ran your script as is and I got the following results:

C R S ? Z R S T U V W X Y Z

The results tell me that the encoding is the special locale C which maps to ASCII, the ? mark tells you that something is missing. C maps to ASCII, but the Š does not. I would guess that you have to declare the locale, so I tried this:

#!/usr/bin/perl use strict; no warnings 'utf8'; use utf8; use POSIX; use locale; print setlocale(LC_CTYPE(), 'et_EE.UTF-8'), "\n\n"; my(@real) = ('R', 'S', 'Š', 'Z'); my(@fake) = ('R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); print "@real\n", "@fake\n";

And the results:

et_EE.UTF-8 R S Š Z R S T U V W X Y Z
I wasn't comfortable with the range operator, so I deleted that. Personally, I think that it might be a platform-specific problem.