>+   lc          Lowercase a string
>+   lcfirst     Lowercase first char of a string
>+   uc          Uppercase a string
>+   ucfirst     Uppercase first char of a string

Not quite; the last one (for ucfirst or \u) should be Titlecase, 
not Uppercase--which of course, are not always the same.

Consider the "dz" character at U+01F3:

    % perl  -e 'printf "U+%04X\n",  ord          chr 0x1F3'
    U+01F3
    % perl  -e 'printf "U+%04X\n",  ord uc       chr 0x1F3'
    U+01F1
    % perl  -e 'printf "U+%04X\n",  ord ucfirst  chr 0x1F3'
    U+01F2

If you're (usefully) running something like

    % xterm -n unicode -u8 -fn 
-misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1 

Then under perl v5.8.1, providing that you've used -C6 or setenv
PERL_UNICODE to 6 or some such similarly useful value, then you can look 
at actual characters on your screen instead of their numeric codepoints.

    % perl -le 'print chr for 0x1f1 .. 0x1f3'
    DZ
    Dz
    dz

If that's too exotic, consider the "ß" character at U+00DF (more 
common in Germany than in Hungary, unlike "dz"):

    % perl -le 'print           pack "U",        0xDF'
    ß
    % perl -le 'print uc        pack "U",        0xDF'
    SS
    % perl -le 'print ucfirst   pack "U",        0xDF'
    Ss

The funny pack is to force the UTF8 flag when 128 < codepoint <= 256.  
That way we get correct casing rules loaded for what would otherwise
presumably appear to be in an 8-bit encoding, since for this peculiar
character, the POSIX and/or ctype.h charclass macros are of no use, 
but the Unicode casing rules are.

    % perl -le 'print           0xDF'
    ß
    % perl -le 'print uc        0xDF'
    ß
    % perl -le 'print ucfirst   0xDF'
    ß

Alas.

--tom

Reply via email to