Re: pack('C'...) sets UTF8 flag

[email protected] (Rafael Garcia-Suarez)
Newsgroups perl.unicode
Message-ID <[email protected]>
Bob Hallissy wrote in perl.unicode :
> Am I doing something wrong or is this a bug:
>
> use strict;
> my $p;
> foreach $p (qw (C U C))
> {
>    my $s = pack($p, 200);
>    print "pack('$p', 200): is_utf8=" . (utf8::is_utf8($s) ? 'yes' : 'no ') 
> . "\t$s\t" . join(',', unpack('C*', $s)) . "\n";
> }
>
> Generates the following output:
>
> pack('C', 200): is_utf8=no      «       200
> pack('U', 200): is_utf8=yes     «       195,136
> Wide character in print at T:\test2.pl line 8.
> pack('C', 200): is_utf8=yes     «       200
>
> Specifically, the first and last ought to be the same, and I shouldn't be 
> getting that error.
>
> Seen on perl 5.8.3, 5.8.6 and 5.8.7. E.g., my current perl -v:
> This is perl, v5.8.7 built for MSWin32-x86-multi-thread
> (with 7 registered patches, see perl -V for more detail)

This is fixed in the development branch of perl (5.9.x).
Something probably goes wrong with the localisation of UTF-8 magic.
The next 5.8.x release may have this bug fixed.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.