Funktion ord() i Perl

I programmeringssproget Perl har en indbygget funktion ord(). Denne funktion returnerer det antal, der svarer til et bestemt symbol.

Her er et eksempel:

▶ Run
#!/usr/bin/perl

use utf8;
use feature qw(say);

say ord('A'); # 65
say ord('1'); # 49
say ord('Ж'); # 1046

Argumenter

Hvis funktioner ord() videregiver ikke nogen argumenter for, at den fungerer med standard variable $_:

▶ Run
#!/usr/bin/perl

$_ = 'a';

print ord(); # 97

Standard brug af denne funktion er at give hende præcis ét tegn. I dette tilfælde, at funktionen vil returnere den numeriske værdi af dette symbol. Hvis funktioner ord() for at overføre en streng, der består af flere figurer, vil funktionen returnere den numeriske værdi af den første karakter:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say ord('a'); # 97
say ord('abcdef'); # 97

Hvis funktioner ord() pass mere end ét argument, vil det fejl:

▶ Run
#!/usr/bin/perl

print ord('a', 'b', 'c');
Too many arguments for ord at script.pl line 3, near "'c')"
Execution of script.pl aborted due to compilation errors.

I tilfældet, hvis du passere i ord() er en tom streng, vil funktionen returnere antallet 0:

▶ Run
#!/usr/bin/perl

print ord('');

Unicode

Her er en prøve på programmet, i hvilken de samme symbol, en funktion ord() vender tilbage en anden værdi:

▶ Run
#!/usr/bin/perl

use feature qw(say);

say ord('Ъ');

use utf8;

say ord('Ъ');

Programmet vil vise:

208
1066

Det første opkald ord('Ъ') returnerer antallet 208. Dette sker på grund af det faktum, at ord() at tage sit argument som et enkelt tegn, men som en streng af to bytes 208 170 og returnerer et tal, der for det første tegn i strengen.

Men efter use utf8; perl mener, at din kode er kodet utf8 og ord() tager sit argument, som en streng af to tegn, og som en streng af et enkelt tegn. Og returnerer værdien 1066.

Officiel dokumentation

Her er outputtet af kommandoen perldoc -f ord:

    ord EXPR
    ord     Returns the numeric value of the first character of EXPR. If
            EXPR is an empty string, returns 0. If EXPR is omitted, uses $_.
            (Note *character*, not byte.)

            For the reverse, see "chr". See perlunicode for more about
            Unicode.

Andre artikler