perl-unicode

Re: Weird interaction of ord, split, and substr with UTF-8?

2000-10-31 17:03:33
And now I'm having a mysterious (to me) error with ord in Unicode::String.

==========
#!/usr/bin/perl -w

use Unicode::String qw(utf8);

if(&CheckForProhib("abc")) {print "OK\n"} else {print "Bad\n"};

sub CheckForProhib {
    my $ProhibCheckString = shift(@_);
    my (%ProhibHash, $ThisOrd, @AllInChars, $i, $ThisChar, $ThisHex);

    $ProhibHash{100} = 1;  # Stub value for example

    # Compare the characters in the input against the values in
    #    the ProhibHash.
    for($i=0; $i<(utf8($ProhibCheckString)->length); $i++) {
        push(@AllInChars, utf8($ProhibCheckString)->substr($i, 1));
    }
    print "Sanity check on string: ", join('-', @AllInChars), "\n";
    foreach $ThisChar (@AllInChars) {
        print "Sanity check on char: $ThisChar\n";
        $ThisOrd = utf8($ThisChar)->ord;
        if(exists($ProhibHash{$ThisOrd})) {
            $ThisHex = sprintf("%04lx", $ThisOrd);
            die "Found prohibited character $ThisHex; failing.\n"
        }
    }
}
==========

With Unicode-String-2.06, this produces:

Sanity check on string: a-b-c
Sanity check on char: a
Can't locate object method "ord" via package "a" at ./z line 23.

Am I calling "ord" incorrectly? That doesn't seem likely, given that length and substr worked just fine. Any help would be appreciated.

--Paul Hoffman

<Prev in Thread] Current Thread [Next in Thread>