On Sat, 21 Jun 2003 12:47:23 -0400 Daniel Yacob <[EMAIL PROTECTED]> wrote:
> > Greetings, > > I've submitted to CPAN the module Convert::Digits which provides a > conversion service for digits found in the scripts of unicode. It > works fine as best as I can tell but non-fatal errors do appear from > utf8_heavy.pl when working on scripts outside the BMP: > > Use of uninitialized value in numeric lt (<) at /usr/lib/perl5/5.8.0/utf8_heavy.pl > line 197. > > > This is the first time I've worked with chars outside the BMP so > I don't know what issues to anticipate. Do I need adjust anything > with the module for this range, or is this a known bug in utf8_heavy? > I'm working with Perl 5.8.0 on RH9. > > The error lines will appear when running "make test" or the example > script "examples/digits.pl". Any advice appreciated. > > thanks, > > /Daniel my $bits; #.... (snip) if ($minbits < 32) { my $top = 0; while ($list =~ /^([0-9a-fA-F]+)(?:[\t]([0-9a-fA-F]+)?)(?:[ \t]([0-9a-fA-F]+))?/mg) { my $min = hex $1; my $max = defined $2 ? hex $2 : $min; my $val = defined $3 ? hex $3 : 0; $val += $max - $min if defined $3; $top = $val if $val > $top; } $bits = $top > 0xffff ? 32 : $top > 0xff ? 16 : $top > 1 ? 8 : 1 } $bits = $minbits if $bits < $minbits; Obviously, when $minbits >= 32, $bits is undefined. That causes the warning in "$bits < $minbits;". When the right part of tr/// is beyond BMP (e.g. tr/0/\x{10000}/), Perl_pmtrans in op.c seems to call swash_init with bits of 32 (as $minbits). If $minbits >= 32, $bit must be 32 bit, even without a quite heavy check of $list. So, I think that C<if ($minbits < 32)> has a sense and it is better to initialize $bits. (But is utf8_heavy.pl not ported for 64-bits?) #a patch against [EMAIL PROTECTED] --- utf8_heavy.pl~ Thu Jan 23 23:23:32 2003 +++ utf8_heavy.pl Sun Jun 22 13:04:48 2003 @@ -160,7 +160,7 @@ } my $extras; - my $bits; + my $bits = 0; my $ORIG = $list; if ($list) { #End of Patch SADAHIRO Tomoyuki