>>>>> On Sat, 30 Mar 2002 18:39:37 +0900, Dan Kogai <[EMAIL PROTECTED]> said:
> On Saturday, March 30, 2002, at 04:57 , Andreas J. Koenig wrote: >> All the warnings below seem bogus to me. >> >> % /usr/local/perl-5.7.3@15620/bin/perl -wle ' >> use Encode qw(from_to); >> $x = "\x{df}"; >> from_to($x,"utf-8","iso8859-1"); >> ' >> Use of uninitialized value in subroutine entry at >> /usr/local/perl-5.7.3@15620/lib/5.7.3/i686-linux-thread-multi/Encode.pm >> line 200. >> Use of uninitialized value in subroutine entry at >> /usr/local/perl-5.7.3@15620/lib/5.7.3/i686-linux-thread-multi/Encode.pm >> line 200. >> [snip] > I was confused with this one until I have read it thought till the > end of your report. "\x{df}" is NOT UTF-8! Let's see this one one > more time. Sorry for the confusion: I DID KNOW. I was complaining about the inappropriate error message when I said: For the above I would expect something like "illegal character in string". > use Encode qw(encode_utf8 from_to); > $x = encode_utf8("\x{df}"); > from_to($x,"utf-8","iso8859-1"); > And the following will warn like this; > "\N{U+100}" does not map to iso-8859-1 at > /usr/home/dankogai/work/Encode/blib/lib/Encode.pm line 200. > Use of uninitialized value in length at > /usr/home/dankogai/work/Encode/blib/lib/Encode.pm line 202. > The first one is a good, informative warning No it isn't. \N{U+100} is not valid perl. I believe this pseudo-patch to Encode.xs is needed: Perl_warner(aTHX_ packWARN(WARN_UTF8), - "\"\\N{U+%" UVxf + "\"\\x{%" UVxf "}\" does not map to %s", ch, > but the second one is not. > It is encode() that is warning. The following pseudo-diff-u will > fix it. > sub from_to > { > my ($string,$from,$to,$check) = @_; > my $f = find_encoding($from); > croak("Unknown encoding '$from'") unless defined $f; > my $t = find_encoding($to); > croak("Unknown encoding '$to'") unless defined $t; > my $uni = $f->decode($string,$check); > return undef if ($check && length($string)); > $string = $t->encode($uni,$check); > return undef if ($check && length($uni)); > - return length($_[0] = $string); > + return defined($_[0] = $string) ? length($string) : undef ; > } Thanks! -- andreas