in reply to Re^2: UTF8 hash key downgraded when assigned
in thread UTF8 hash key downgraded when assigned

Have you saved it as UTF-8?

No ... and can't immediately find a way of doing so on this Windows machine.
Is that the reason the script, as posted by the OP, failed to compile for me ?

I thought that my script might have been relevant, since its output matched the output the OP expected.
But if it's not relevant then please let me know (and I'll mark it so).

Cheers,
Rob
  • Comment on Re^3: UTF8 hash key downgraded when assigned

Replies are listed 'Best First'.
Re^4: UTF8 hash key downgraded when assigned
by ikegami (Patriarch) on Dec 01, 2018 at 04:01 UTC

    Yes. You told Perl to expect UTF-8, but didn't provide it. Notepad can "Save As" UTF-8.

      Notepad can "Save As" UTF-8

      Yep, got it. Thanks. (Didn't notice the encoding options.)
      The error I was originally getting with gibus' script then evaporates, and I see the same behaviour as gibus reported.
      Again, the behaviour that gibus wanted to see is achieved by assigning the string clé to a variable:
      #!/usr/bin/perl use strict; use warnings; use utf8; use Devel::Peek; use Data::Dumper; $Data::Dumper::Useqq = 1; my $s = 'clé'; my %hash = ( $s => 0, ); my $key = (keys %hash)[0]; Dump($key); print Dumper($key); $hash{$s} = 1; $key = (keys %hash)[0]; Dump($key); print Dumper($key); __END__ Outputs: SV = PV(0x89d7b8) at 0x339d80 REFCNT = 1 FLAGS = (POK,pPOK,UTF8) PV = 0x8992e8 "cl\303\251"\0 [UTF8 "cl\x{e9}"] CUR = 4 LEN = 5 $VAR1 = "cl\x{e9}"; SV = PV(0x89d7b8) at 0x339d80 REFCNT = 1 FLAGS = (POK,pPOK,UTF8) PV = 0x2549998 "cl\303\251"\0 [UTF8 "cl\x{e9}"] CUR = 4 LEN = 5 $VAR1 = "cl\x{e9}";
      But I don't know how relevant that is.

      Cheers,
      Rob