Text::UpsideDown is dead simple in this respect, it just replaces each ASCII character (except for symmetrical ones like H or I) with a corresponding Unicode character that looks like its upside-down version and returns you that string. The question marks are from your terminal. Maybe your font doesn't have the necessary characters? I don't remember how one changes the font in a Windows XP console but it should be possible to set something like Courier New that has good support for the more exotic ISO-10646 characters.