in reply to encoding question

If add a use utf8 statement, then for the first say() I see "A with diaeresis(umlaut)", but then the substitutions are performed, and the second say() outputs "Tht pple".

I don't see two say() statements in your program, only one... care to enlighten me?

use utf8; is used to indicate that the script itself is stored as UTF-8. If that's not the case, don't use it.

If I store your script as Latin-1 and execute it, the substitution works.

Perl 6 - links to (nearly) everything that is Perl 6.

Replies are listed 'Best First'.
Re^2: encoding question
by 7stud (Deacon) on May 20, 2010 at 07:26 UTC

    edited my post

    use utf8; is used to indicate that the script itself is stored as UTF-8. If that's not the case, don't use it.

    That was my understanding as well, but I noticed that it allowed the substitution to work.

      So your script is stored in UTF-8.

      Update: And to elaborate, since your script is stored in UTF-8, the string literal is also UTF-8. Decoding an UTF-8 string as Latin-1 is nonsensical. Either keep your script in UTF-8, and use utf8; (preferred), or store your script as Latin-1.

        I'm using vim. How do I set the encoding of a perl program I save?

        Better yet, if I remove the string from my program and move it into a text file, how do I type a latin-1 character in the text file, and how do I save the text file as a latin-1 file?

        Edit: Ok, I figured out how to type the character: my character palette has two buttons, a Unicode button and an Other Encodings button. When I switch to Other Encodings and select ISO-8859-1, the character codes listed on the left of the character palette change. I checked everything with a hex editor too. Originally, UTF-8 encodings were entered in the text file. So I can get everything to work when the string is in a text file. I guess that is good enough.